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位的则不需要,加密后直接对比就可以了!