如何使用CryptSharp验证输入?

时间:2016-09-13 14:28:38

标签: c# cryptsharp

使用以下功能,您可以使用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;
}

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

1 个答案:

答案 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);
        }