关于c#:生成的密码哈希值后面跟着’==’

Generated password hashes are always followed by a '=='

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

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

应用程序在C和ASP.NET中,生成盐和哈希的代码如下…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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中的所有内容都以==结尾。