大伙们,
我从Preferred Method of Storing Passwords In Database中了解到存储密码的哈希值是安全的……
发布于 2010-01-05 17:35:56
简单散列:
public string GetSHA256Hash(string s)
{
if (string.IsNullOrEmpty(s))
{
throw new ArgumentException("An empty string value cannot be hashed.");
}
Byte[] data = System.Text.Encoding.UTF8.GetBytes(s);
Byte[] hash = new SHA256CryptoServiceProvider().ComputeHash(data);
return Convert.ToBase64String(hash);
}
发布于 2010-01-05 17:29:57
对于散列,你在System.Security.Cryptography中有几种支持的算法,对于你的用例,你可能想要选择一个基于SHA的散列或类似的东西。
关于比较:您不会将DB值与用户给您的值进行比较。使用的加密/散列函数与最初在DB中存储密码时使用的函数相同,这次使用的是用户输入。如果结果等于数据库中的哈希值,则密码(可能)是正确的。
这样做的目的是,有权访问数据库的任何人都不能以明文形式检索密码,甚至您的程序也不需要知道它(只有接受用户输入的部分才会在短时间内拥有它)。
链接(甚至可能是重复的):
发布于 2010-01-05 17:30:43
严格地说,你应该salt the password然后散列它,以避免字典攻击。您可以在System.Cryptography
名称空间中使用HashAlgorithm
抽象类的任何实现来计算散列-当前最佳选择可能是SHA-2 algorithms之一。
您存储哈希而不是密码,并比较哈希值以验证用户身份。
https://stackoverflow.com/questions/2005054
复制相似问题