私は現在、平文のパスワードを持つプロジェクトに取り組んでいます。ここで、すべての平文パスワードを 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 メソッドによって生成されたハッシュは、上記で生成したハッシュと同じではないと思います。