2

データベース プロバイダーとして SimpleMembershipProvider を使用しています。

継承によってこのプロバイダーを改善するために、既に新しい関数を追加しています。

「ChangeEmail」のような関数を作成したいのですが、その前に入力したパスワードが正しいことを確認してください。

したがって、入力したパスワードを暗号化し、結果をデータベースのエントリと比較する必要があります。

質問は:

SimpleMembershipProvider はどのようにパスワードを暗号化しますか?

私は試した:

Crypto.HashPassword(currentPassword);

結果は似ていましたが、データベースのように同じではありませんでした。

PasswordFormat プロパティが MembershipPasswordFormat.Hashed に設定されています。

たとえば、登録中に生成された「123456」のハッシュ:

AIYlAKcmDaABMw1PVx1kheZq2KXkhVs4QjO7MnwfHPcTBjnmRobRqJzWYHYO/S4T7w==

そしてこれはCrypto.HashPasswordを介して:

AG+md+0W2EuV9BzUdohkYMK547jB5ochvxeVKYQTkls0UQ+3W0BWPHnFoffiIn2byw==

同じタイプのエンコーディングのように見えますが、結果が異なるのはなぜですか?

4

1 に答える 1

6

Crypto.HashPassword呼び出しごとに新しいソルトを生成するため、出力は毎回異なります。使用を確認するにはCrypto.VerifyHashedPassword

または、直接使用Rfc2898DeriveBytesします。これにより、ハッシュ コストを調整でき、ネイティブ サイズ (20 バイト) よりも大きなハッシュの使用を避けることができます。

于 2013-01-14T14:48:45.987 に答える