我正在尝试将用户密码存储在我的程序中,但我不想将其存储为纯文本。因此,我正在对它进行哈希并存储,当用户需要在程序启动时输入密码(以防止未经授权的用户),我正在哈希输入的密码并比较两个哈希值。
但是,以下代码为几乎所有输入的密码生成相同的哈希值。任何人都可以告诉我如何修复以下代码,或者指导我更好的哈希函数吗?
public static string getSHA1(string userPassword)
{
return BitConverter.ToString(SHA1Managed.Create().ComputeHash(Encoding.Default.GetBytes(userPassword))).Replace("-", "");
}
感谢您的帮助。
答案 0 :(得分:1)
使用类似的东西
private static string GetSHA1(string text)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] hashValue;
byte[] message = UE.GetBytes(text);
SHA1Managed hashString = new SHA1Managed();
string hex = "";
hashValue = hashString.ComputeHash(message);
foreach (byte x in hashValue)
{
hex += String.Format("{0:x2}", x);
}
return hex;
}
答案 1 :(得分:0)
我将你的功能插入一个新项目,似乎工作正常,所以检查密码是如何提供给该功能的。我会谨慎使用Encoding.Default
而不是显式编码,因为它说它依赖于系统。
这是我制作的那个:
public static string getSHA1(string userPassword)
{
return Convert.ToBase64String(new SHA1Managed().ComputeHash(Encoding.Unicode.GetBytes(userPassword)));
}
注意:正如评论中指出的那样,以这种方式进行密码存储/匹配是不好的: