2

私は独自のカスタム メンバーシップ プロバイダーを作成していますが、以下に示すメンバーシップ プロバイダー独自の EncodePassword メソッドを使用しています。

internal string EncodePassword(string pass, int passwordFormat, string salt)

{
if (passwordFormat == 0) // MembershipPasswordFormat.Clear
    return pass;

byte[] bIn = Encoding.Unicode.GetBytes(pass);
byte[] bSalt = Convert.FromBase64String(salt);
byte[] bAll = new byte[bSalt.Length + bIn.Length];
byte[] bRet = null;

Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
if (passwordFormat == 1)
{ // MembershipPasswordFormat.Hashed
    HashAlgorithm s = HashAlgorithm.Create( Membership.HashAlgorithmType );
    bRet = s.ComputeHash(bAll);
} else
{
    bRet = EncryptPassword( bAll );
}

return Convert.ToBase64String(bRet);
}

.NET 4 で使用されているアルゴリズムが HMACSHA256 であることを何時間も探し回った結果、私は今知っています。アルゴリズムが正しく機能するにはキーが必要であることを理解しています。

私の質問は、これをどのように行うのですか?

キーを構成ファイルに入れて、何らかの方法で参照しますか?

どんな助けでも大歓迎です!

ありがとう。

4

1 に答える 1

2

SHA! を使用しないでください。BCrypt.Net にアクセスしてダウンロードします。SHA はハッシングが速すぎるため、SHA で暗号化されたものは何でもブルート フォース攻撃を受けやすくなります。BCrypt は、構成可能な作業要素のために遅くなります。そのため、ユーザーには気付かれませんが、1 秒間に 700m のキーをブルート フォースしようとすると、単純にできません。

bcrypt を取得したら、ハッシュするために必要なことは次のとおりです。

private static readonly int BCRYPT_WORK_FACTOR = 10;
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(account.HashedPassword, BCRYPT_WORK_FACTOR);

パスワードを確認するには:

bool matched = BCrypt.Net.BCrypt.Verify(password, match.HashedPassword))

私はこれをもう少し詳しくここに書いています http://www.danharman.net/2011/06/25/encrypting-hashing-passwords-for-your-website/

于 2011-06-25T01:12:52.993 に答える