我一直在这个问题一段时间。我需要将用户输入的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