zeteticには、bcrypt2のサポートを含む非常に優れた暗号化ライブラリがあります。ASP.NETメンバーシッププロバイダーに組み込むのは簡単なようです(実際、デフォルトプロバイダーの手順はここにあります)。EncodePassword関数にSHA1ハッシュ形式をハードコーディングしているように見えるNHibernateメンバーシッププロバイダー(ここにあります)を使用しています。私の質問は、これをBCrypt2(特にZeteticのラッパー)で動作するようにどのように適合させるべきかということです。これは私が間違っていることを非常に恐れていることであり、それが「機能する」はずではないが、私が見つける資格がないいくつかの隠れた欠陥があるので、自分でそれを突き刺すことには消極的です。
private string EncodePassword(string password)
{
string encodedPassword = password;
switch (PasswordFormat)
{
case MembershipPasswordFormat.Clear:
break;
case MembershipPasswordFormat.Encrypted:
encodedPassword =
Convert.ToBase64String(EncryptPassword(Encoding.Unicode.GetBytes(password)));
break;
case MembershipPasswordFormat.Hashed:
HMACSHA1 hash = new HMACSHA1();
hash.Key = HexToByte(_machineKey.ValidationKey);
encodedPassword =
Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));
break;
default:
throw new ProviderException("Unsupported password format.");
}
return encodedPassword;
}