使用以下功能,您可以使用bcrypt加密输入字符串。
public static string CreatePassword(string password)
{
// no need to provide a Salt value since bcrypt does that automatically
byte[] PasswordBytes = Encoding.ASCII.GetBytes(password);
return Crypter.Blowfish.Crypt(PasswordBytes);
}
这使用了CryptSharp这很棒,但是如何针对此函数返回的哈希验证用户输入?
我无法在库中找到任何功能来执行此操作。
我能想到的最佳方法是:
public static bool ValidatePassword(string password, string passwordHash)
{
// crypt the entered password
string Crypted = Crypter.Blowfish.Crypt(Encoding.ASCII.GetBytes(password));
// compare the crypted password against the value in the database
if (String.Compare(Crypted, passwordHash, false) != 0) return false;
return true;
}
唯一的问题是盐值不一样,因此值几乎总是不一致。
答案 0 :(得分:0)
盐应该是独一无二的。避免相同密码的数据库密码破解。您应该使用密码存储salt,如果用户登录,则应检查用户输入和密码是否相同
在第二个参数中,您可以提供自定义盐
string salt = Crypter.Blowfish.GenerateSalt(20);
Crypter.Blowfish.Crypt(PasswordBytes,salt);
对于验证,您可以使用此
public static bool ValidatePassword(string inputPassword, string storedPassword, string salt)
{
// crypt the entered password and stored password
string CryptedInput = Crypter.Blowfish.Crypt(Encoding.ASCII.GetBytes(inputPassword), salt);
string CryptedPassword = Crypter.Blowfish.Crypt(Encoding.ASCII.GetBytes(storedPassword), salt);
// compare the crypted passwords
return string.Equals(CryptedInput, CryptedPassword);
}