zetetic 有一个非常好的加密库,其中包括对 bcrypt2 的支持。看起来它应该足够简单,可以合并到 ASP.NET 成员资格提供程序中(事实上,可以在此处找到默认提供程序的说明)。我正在使用 NHibernate Membership Provider(在此处找到),它似乎在其 EncodePassword 函数中硬编码 SHA1 哈希格式。我的问题是,这应该如何适应 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;
}