我重复使用了一些旧代码,发现我一直在使用此代码生成 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 Class
关于c# - .net4 上的 SHA1 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051074/