【发布时间】:2017-03-14 02:13:44
【问题描述】:
在我的应用程序中,我有一个散列密码并生成盐的类。出于某种原因,每个哈希似乎总是以双等号 (==) 结尾。
我做错了吗?这些哈希值不安全吗?
应用程序在 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 字符串。您将遇到的下一个问题是通过电线传输这些字符串。您需要转换为"base64url",将“+”转换为“-”,将“/”转换为“_”。请参阅en.wikipedia.org/wiki/Base64#URL_applications 了解更多信息。