请您告诉我一些简单的算法,用于通过MD5散列用户密码,但使用 salt 来提高可靠性。
现在我有了这个:
private static string GenerateHash(string value)
{
var data = System.Text.Encoding.ASCII.GetBytes(value);
data = System.Security.Cryptography.MD5.Create().ComputeHash(data);
return Convert.ToBase64String(data);
}
答案 0 :(得分:40)
您可以使用HMACMD5类:
var hmacMD5 = new HMACMD5(salt);
var saltedHash = hmacMD5.ComputeHash(password);
也适用于SHA-1,SHA256,SHA384,SHA512和RIPEMD160:
var hmacSHA1 = new HMACSHA1(salt);
var saltedHash = hmacSHA1.ComputeHash(password);
salt
和password
都需要作为字节数组。
如果你有字符串,你必须先将它们转换为字节:
var salt = System.Text.Encoding.UTF8.GetBytes("my salt");
var password = System.Text.Encoding.UTF8.GetBytes("my password");
答案 1 :(得分:12)
这是一个sample。它处理MD5,SHA1,SHA256,SHA384和SHA512。
答案 2 :(得分:3)
除了上面提到的HMACSHA1类之外,如果你只需要快速盐腌哈希,那么你已经有95%了:
private static string GenerateHash(string value, string salt)
{
byte[] data = System.Text.Encoding.ASCII.GetBytes(salt + value);
data = System.Security.Cryptography.MD5.Create().ComputeHash(data);
return Convert.ToBase64String(data);
}
真正的诀窍是将盐存储在安全的位置,例如machine.config。
答案 3 :(得分:1)
Microsoft已经为您完成了这项工作,但需要进行一些挖掘。安装Web Service Extensions 3.0,并查看带有Reflector的Microsoft.Web.Services3.Security.Tokens.UsernameToken.ComputePasswordDigest
函数。
我想在这里将源代码发布到该函数,但我不确定这样做是否合法。如果有人能安慰我,那么我会这样做。