我最近在我正在進行的項目中爲我的密碼實施了哈希處理,而且我似乎無法弄清楚發生了什麼問題。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