在.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/

进行测试时相同的哈希值

哪个是正确的?

我在这里做错了什么吗?

在.net上生成SHA1

很可能是编码不同。您正在使用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)));