0

私は現在、平文のパスワードを持つプロジェクトに取り組んでいます。ここで、すべての平文パスワードを HASH に変更する必要があります。データベースには、パスワード フィールドとパスワード ソルト フィールドがあります。

.Net で次のことを試しました (.Net 4 は HMACSHA256 アルゴリズムを使用していることがわかりました)。データベースに既にあるソルトを使用してパスワードをハッシュします。

// I retrieved the password and salt from database and hashed it
string authDetails = row["Password"] + row["PasswordSalt"].ToString(); //password salt - value from database 
byte[] authBytes = System.Text.Encoding.UTF8.GetBytes(authDetails);

var hma = new System.Security.Cryptography.HMACSHA256();
byte[] hashedBytes = hma.ComputeHash(authBytes);
string hash = Convert.ToBase64String(hashedBytes);

上記のハッシュ変数値をパスワードフィールドに保存しました。

そして、構成設定 passwordFormat="hashed" を変更しました。

パスワードでログインしようとすると、ログインに失敗します。古いパスワードでログインできません。何か案は?

ありがとう!

編集:明確にするために..私はasp.netメンバーシッププロバイダーを使用しています。web.config で PasswordFormat を 'Hashed' に変更しました。次に、Membership.ValidateUser を呼び出してログオンを検証します。- 入力したパスワードを自動的にハッシュし、データベースと照合すると思います。しかし、validateuser メソッドによって生成されたハッシュは、上記で生成したハッシュと同じではないと思います。

4

3 に答える 3

2

HMAC はキー付きハッシュ/ハッシュのファミリーです。その新しいインスタンスを生成すると、.net はキーをランダムな値に初期化します。したがって、家族の別のメンバーが得られるため、結果も異なります。

原則として、プレーン SHA256 に切り替えるか、ソルトをキーとして使用できますHMACSHA256(key=salt,message=password)。しかし、それは悪い考えです。

低速な特殊なパスワード ハッシュ関数を使用する必要があります。パスワードを安全にハッシュする方法を参照してください。パスワードハッシュの詳細については、security.SEを参照してください。.net には、Rfc2898DeriveBytesPBKDF2-HMAC-SHA1 を実装するものがあります。

于 2013-06-04T21:09:15.693 に答える
0

use hashmac を使用する必要はありませんが、sha256 のようにハッシュするだけです。ハッシュマックのポイントは、キーを使用してメッセージを認証するときに使用されますが、パスワードのソルティングには必要ありません (ハッシュマックはキーである追加のパラメーターを取ります)

あなたに必要なのは

sha256(password + salt)
于 2013-06-04T20:05:31.080 に答える