如何验证输入与CryptSharp
本文关键字:输入 CryptSharp 验证 何验证 | 更新日期: 2023-09-27 18:07:01
使用下面的函数可以用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;
}
唯一的问题是,盐值将不相同,因此值几乎总是不一致。
盐应该是唯一的。避免数据库密码被相同的密码破解。您应该将盐与密码一起存储,如果用户登录,您应该检查用户输入和密码是否具有相同的盐
在第二个参数中,您可以使用自定义salt
string salt = Crypter.Blowfish.GenerateSalt(20);
Crypter.Blowfish.Crypt(PasswordBytes,salt);
对于Validate,您可以使用
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);
}