在.net上生成SHA1
本文关键字:SHA1 net | 更新日期: 2023-09-27 18:14:02
我重用了一些旧代码,然后发现我一直在使用这些代码来生成SHA1哈希。
HashAlgorithm sha = new SHA1CryptoServiceProvider();
return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim()));
当我使用以下代码生成sha1哈希时,我不会得到与使用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)));