生成的密码哈希值后面始终跟有“==”

问题描述 投票:0回答:2

在我的应用程序中,我有一个类可以对密码进行哈希处理并生成盐。由于某种原因,每个哈希似乎总是以双等号 (==) 结尾。

我做错了什么吗?这些哈希值不安全吗?

该应用程序采用 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); 
    }
}

谢谢!

c# asp.net hash passwords
2个回答
2
投票

当然它会以 == 结尾,你正在编码为 Base64! :)。 Base64 中的所有内容都以 == 结尾。


0
投票

不,是这样 您将哈希密码编码为 base64,这就是为什么它在最后一行显示“==”,这没有任何问题

© www.soinside.com 2019 - 2024. All rights reserved.