18

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

3 に答える 3

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");
于 2009-08-19T15:55:20.483 に答える
4

上記の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などの安全な場所にソルトを保存することです。

于 2009-08-19T16:24:57.053 に答える
1

マイクロソフトはあなたのためにこの仕事をしました、しかしそれは少し掘り下げる必要があります。Web Service Extensions 3.0をインストールし、Microsoft.Web.Services3.Security.Tokens.UsernameToken.ComputePasswordDigestReflectorの機能を確認してください。

ここでその関数にソースコードを投稿したいのですが、それが合法かどうかはわかりません。誰かが私を安心させることができるなら、私はそうします。

于 2009-08-19T16:10:08.440 に答える