[英]SHA1 generation on .net4
我重用了一些旧代码,发现我一直在使用此代码生成SHA1哈希。
HashAlgorithm sha = new SHA1CryptoServiceProvider();
return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim()));
当我使用以下代码生成SHA1-hash时,我得到的哈希值与使用例如http://gtools.org/tool/sha1-hash-generator/进行测试时的哈希值不同
哪一个是正确的?
我在这里做错什么了吗?
很有可能是编码方面的差异。 您正在使用UTF-16。 尝试使用UTF-8。
刚刚确认该站点使用UTF-8。 但是它们的代码对于某些字符(例如'
是无效'
,因为它们将输入通过sql转义。
但是用普通的SHA-1哈希密码几乎永远不是正确的选择。 在大多数情况下,例如存储用于登录网站的密码,您应该使用适当的密码哈希函数,例如PBKDF2,bcrypt或带有适当盐的scrypt。
PBKDF2在.net中的Rfc2898DeriveBytes类中实现
SHA-1盐化示例:
return Convert.ToBase64String(
new HMACSHA1(
Encoding.UTF8.GetBytes(salt))
.ComputeHash(
Encoding.UTF8.GetBytes(input)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.