生成的密码散列后面总是跟着'=='

本文关键字:密码 | 更新日期: 2023-09-27 18:15:39

在我的应用程序中,我有一个类来散列密码并生成盐。由于某些原因,每个散列似乎总是以双等号(==)结束。

我做错了什么吗?这些散列不安全吗?

该应用程序使用c#和asp.net编写,生成盐和哈希值的代码如下…

public class PasswordService : IPasswordService
{
    private static RandomNumberGenerator random = RandomNumberGenerator.Create();
    public string HashPassword(string salt, string password)
    {
        Rfc2898DeriveBytes hasher = new Rfc2898DeriveBytes(password, Convert.FromBase64String(salt), 10000);
        byte[] hash = hasher.GetBytes(64);
        return Convert.ToBase64String(hash);
    }
    public bool VerifyPasswordHash(string salt, string password, string hash)
    {
        return HashPassword(salt, password) == hash;
    }
    public string GenerateSalt()
    {
        int max_length = 32;
        byte[] salt = new byte[max_length];
        random.GetBytes(salt);
        return Convert.ToBase64String(salt); 
    }
}

谢谢!

生成的密码散列后面总是跟着'=='

当然它将以==结束,您正在编码到Base64!:)。Base64中所有内容都以==结尾