我一直在這個問題一段時間。我需要將用戶輸入的paasword與成員資格DB中的密碼進行比較。密碼被散列並且有鹽。 由於缺少文檔,我不知道salt是否附加到密碼,然後散列它是如何創建的。ASP.NET會員C# - 如何比較現有密碼/散列
我無法得到此結果。從函數返回的哈希從不匹配數據庫中的哈希,我知道它實際上是相同的密碼。微軟似乎以不同的方式散列密碼,那麼我就是。
我希望有人有一些見解請。
這裏是我的代碼:
protected void Button1_Click(object sender, EventArgs e)
{
//HERE IS THE PASSWORD I USE, SAME ONE IS HASHED IN THE DB
string pwd = "Letmein44";
//HERE IS THE SALT FROM THE DB
string saltVar = "SuY4cf8wJXJAVEr3xjz4Dg==";
//HERE IS THE PASSWORD THE WAY IT STORED IN THE DB AS HASH
string bdPwd = "mPrDArrWt1+tybrjA0OZuEG1P5w=";
// FOR COMPARISON I DISPLAY IT
TextBox1.Text = bdPwd;
// HERE IS WHERE I DISPLAY THE return from THE FUNCTION, IT SHOULD MATCH THE PASSWORD FROM THE DB.
TextBox2.Text = getHashedPassUsingUserIdAsSalt(pwd, saltVar);
}
private string getHashedPassUsingUserIdAsSalt(string vPass, string vSalt)
{
string vSourceText = vPass + vSalt;
System.Text.UnicodeEncoding vUe = new System.Text.UnicodeEncoding();
byte[] vSourceBytes = vUe.GetBytes(vSourceText);
System.Security.Cryptography.SHA1CryptoServiceProvider vSHA = new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] vHashBytes = vSHA.ComputeHash(vSourceBytes);
return Convert.ToBase64String(vHashBytes);
}
@Moe,你是最棒的,你救了我。我不知道該如何謝謝你。 如果有什麼我能做的,就說出來。 謝謝大家的所有意見,你們都非常樂於助人。我只希望有一天我會和你一樣好,也能幫助別人。 Steve – Steve 2010-04-26 19:27:29
如果您使用上面的代碼來散列和比較安全性答案,請確保像SqlMembershipProvider那樣執行'passwordAnswer.ToLower(CultureInfo.InvariantCulture)'。如果沒有'ToLower()',計算出來的哈希將與存儲的安全答案哈希不同。 – 2014-06-25 05:31:26