C# .net4上的SHA1代
我重用了一些旧代码,后来发现我一直在使用这些代码生成SHA1哈希C# .net4上的SHA1代,c#,.net,hash,sha1,C#,.net,Hash,Sha1,我重用了一些旧代码,后来发现我一直在使用这些代码生成SHA1哈希 HashAlgorithm sha = new SHA1CryptoServiceProvider(); return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim())); 当我使用以下代码生成SHA1散列时,我的散列结果与使用测试时的散列结果不同,例如 哪一个是正确的 我在这里做错了什么吗?很可能是编码上的差异。您正在使用UTF-16。尝试使用U
HashAlgorithm sha = new SHA1CryptoServiceProvider();
return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim()));
当我使用以下代码生成SHA1散列时,我的散列结果与使用测试时的散列结果不同,例如
哪一个是正确的
我在这里做错了什么吗?很可能是编码上的差异。您正在使用UTF-16。尝试使用UTF-8 刚刚确认该站点使用UTF-8。但是它们的代码对于某些字符是断开的,例如
“
,因为它们通过sql转义输入
但用普通SHA-1散列密码几乎从来都不是正确的选择。在大多数情况下,例如存储用于登录站点的密码,您应该使用适当的密码哈希函数,例如PBKDF2、bcrypt或带有适当salt的scrypt
PBKDF2在SHA-1盐析示例的.net中实现:
return Convert.ToBase64String(
new HMACSHA1(
Encoding.UTF8.GetBytes(salt))
.ComputeHash(
Encoding.UTF8.GetBytes(input)));
请确保“SHA-1的非种子单一应用程序几乎永远不会…”感谢您的输入!仅通过SSL运行时也是这样吗?@nj。SSL在这种情况下是不相关的,因为密码是散列存储在数据库中的,以防止数据库被盗。通过网络发送的密码不应散列,而应使用SSL进行保护。我的理解是,此功能设计为MAC。这反过来意味着它很快。您需要使用迭代方案来降低速度,这正是PBKDF2所做的。