我重用了一些旧代码,发现我一直在使用这段代码生成SHA1哈希。
HashAlgorithm sha = new SHA1CryptoServiceProvider();
return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim()));
当我使用以下代码生成SHA1-hash时,我最终没有使用与我测试时相同的哈希,例如,http://gtools.org/tool/sha1-hash-generator/
哪一个是正确的?
我在这里做错了吗?
答案 0 :(得分:4)
很可能是编码方面的差异。你使用的是UTF-16。尝试使用UTF-8。
刚刚确认此网站使用的是UTF-8。但是他们的代码因某些字符而被破坏,例如'
,因为他们通过sql转义来输入它们。
但使用普通SHA-1散列密码几乎不是正确的选择。在大多数情况下,例如存储用于登录站点的密码,您应该使用正确的密码散列函数,例如PBKDF2,bcrypt或带有适当盐的scrypt。
PBKDF2在。Rfc2898DeriveBytes Class
中的.net中实现答案 1 :(得分:0)
SHA-1盐渍的例子:
return Convert.ToBase64String(
new HMACSHA1(
Encoding.UTF8.GetBytes(salt))
.ComputeHash(
Encoding.UTF8.GetBytes(input)));