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);
}
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");
これが サンプル です。 MD5、SHA1、SHA256、SHA384、およびSHA512を処理します。
上記の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などの安全な場所にソルトを保存することです。
Microsoftがこの作業を行ってくれましたが、少し掘り下げる必要があります。 Web Service Extensions 3.0をインストールし、ReflectorでMicrosoft.Web.Services3.Security.Tokens.UsernameToken.ComputePasswordDigest
関数を確認します。
ここでその関数にソースコードを投稿したいのですが、それが合法かどうかはわかりません。誰かが私を安心させることができるなら、私はそうします。