create - 在C#中用密碼保存DB的MD5哈希




c# md5 file hash (3)

微軟已經為你完成了這項工作,但需要一點挖掘。 安裝Web Service Extensions 3.0,並查看帶有Reflector的Microsoft.Web.Services3.Security.Tokens.UsernameToken.ComputePasswordDigest函數。

我想在這裡發布這個函數的源代碼,但我不確定這是否合法。 如果任何人都可以放心,我會這樣做。

你可以給我建議一些簡單的算法,用MD5散列用戶密碼,但用鹽來提高可靠性。

現在我有這個:

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);
}

您可以使用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);

saltpassword都是字節數組。

如果你有字符串,你必須先把它們轉換成字節:

var salt = System.Text.Encoding.UTF8.GetBytes("my salt");
var password = System.Text.Encoding.UTF8.GetBytes("my password");

除了上面提到的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。





md5