我最近在我正在进行的项目中为我的密码实施了哈希处理,而且我似乎无法弄清楚发生了什么问题。HashPasswordForStoringInConfigFile - 对于相同密码的不同哈希
似乎HashPasswordForStoringInConfigFile()函数为相同的密码返回不同的值。
我有下面的代码实现,其实际上非常类似于MSDN文档上使用推荐的算法。
我知道SHA1哈希算不算很安全,但这是一个研究应用程序,在这一点上我并不太担心它。
public const int DefaultSaltSize = 5;
private static string CreateSalt()
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buffer = new byte[DefaultSaltSize];
rng.GetBytes(buffer);
return Convert.ToBase64String(buffer);
}
public static string CreateHash(string password)
{
string salt = CreateSalt();
string saltAndPassword = String.Concat(password, salt);
string hashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPassword,"SHA1");
hashedPassword = string.Concat(hashedPassword,salt);
return hashedPassword;
}
public static bool VerifyPassword(string username, string password,AccountDataContext context)
{
var user = context.UserAccounts.FirstOrDefault(p => p.UserName == username);
if (user != null)
{
string salt = user.Password.Substring(user.Password.Length - DefaultSaltSize);
string hashedPassword = CreateHash(password);
return hashedPassword.Equals(user.Password);
}
return false;
}
简而言之,如果我有以下代码。
string password1 = "password";
string password2 = "password";
var hashedPassword1 = CreateHash(password1);
var hashedPassword2 = CreateHash(password2);
var match = hashedPassword1.Equals(hashedPassword2);
//match should be True, but it is turning out False.
看来,FormsAuthenticationForStoringInConfigFile()没有返回在CreateHash()方法和密码1密码2相同的哈希值。
我理解与应用的盐他们是不一样的,但如果你在代码中看到,我比较两个hashedPasswords相等之前删除盐。
什么可能导致password1和password2被不同地散列?
它不起作用,我为了简洁而忽略了呼叫,我应该包括它 – TheJediCowboy