c#MD5加密

原文:http://blog.csdn.net/wonsoft/article/details/5913572

好文:http://www.cnblogs.com/healer007/p/5062189.html

MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来, 经md2、md3和md4发展而来。

MD5具有很好的安全性(因为它具有不可逆的特征,加过密的密文经过解密后和加密前的东东相同的可能性极小)

16位加密

/// <summary>
/// 16位MD5加密
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
public static string GetMD5(string Password)
{
    var md5 = new MD5CryptoServiceProvider();
    string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(Password)), 4, 8);
    t2 = t2.Replace("-", "");
    return t2;
}

32、48、64位加密

 private static string GetMD5(string Password)
          {
              MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
              byte[] bytValue, bytHash;
              bytValue = System.Text.Encoding.UTF8.GetBytes(Password);
              bytHash = md5.ComputeHash(bytValue);
              md5.Clear();
              StringBuilder sTemp = new StringBuilder(Password.Length);
              for (int i = 0; i < bytHash.Length; i++)
            {
                 sTemp.Append(bytHash[i].ToString("X"));  
sTemp.Append(bytHash[i].ToString("X3"));   
sTemp.Append(bytHash[i].ToString("X4"));   
//加密结果"x"结果为32位,"x3"结果为48位,"x4"结果为64位 } return sTemp.ToString().ToLower(); } static void Main(string[] args) { var result = GetMD5("123456"); Console.WriteLine(result);
}

 以下分别是md5通过16位、32位、48位、64位加密后的密码字符

 

注意: 

MD5加密后所得到的常用的是32位的编码,而在不少地方会用到16位的编码
它们有什么区别呢?
16位加密就是从32位MD5散列中把中间16位提取出来!
其实破解16位MD5散列要比破解32位MD5散列还慢。
因为他多了一个步骤,就是使用32位加密后再把中间16位提取出来, 然后再进行对比。
而破解32位的则不需要,加密后直接对比就可以了!

原文地址:https://www.cnblogs.com/likui-bookHouse/p/7447345.html