首先需要明确的是,MD5 只是 .NET 中的加密、数字签名和哈希算法中的一个部分,并且关于这部分的原文是这样写的:
.NET 还提供 MD5 和 SHA1。 但已发现 MD5 和 SHA-1 算法不安全,现在建议改用 SHA-2。 SHA-2 包括 SHA256、SHA384 和 SHA512。
通过彩虹表等形式,黑客是可以提前算好并记录你的 MD5 ,故而有一种稍微改进后的方法,就是 Double And Salt ,即两次运算 MD5 并加盐。
这是一种很通用的方案,当然它并没有解决 MD5 不安全的事实,此处仅作分享。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//MD5 private static string MD5Encoding(string rawPass) { // 创建MD5类的默认实例:MD5CryptoServiceProvider MD5 md5 = MD5.Create(); byte[] bs = Encoding.UTF8.GetBytes(rawPass); byte[] hs = md5.ComputeHash(bs); StringBuilder stb = new StringBuilder(); foreach (byte b in hs) { // 以十六进制格式格式化 stb.Append(b.ToString("x2")); } return stb.ToString(); } // MD5 + Salt public static string MD5Encoding(string rawPass, object salt) { salt = "abc123"; //这里替换成你自己的Salt的值 if (salt == null) return rawPass; return MD5Encoding(salt + MD5Encoding((String)rawPass)); } |
作为测试,可以这样调用:
1 2 3 4 |
//用于测试 string input = "fescogz"; string md5Srting = MD5Encoding(input,"abc6639"); Console.WriteLine(md5Srting); |
将代码用在注册、登录等逻辑代码中,即可。
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/12389