如何验证输入与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;
}

唯一的问题是,盐值将不相同,因此值几乎总是不一致。

如何验证输入与CryptSharp

盐应该是唯一的。避免数据库密码被相同的密码破解。您应该将盐与密码一起存储,如果用户登录,您应该检查用户输入和密码是否具有相同的盐

在第二个参数中,您可以使用自定义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);
        }