C#中的SHA1哈希值是否会永远返回给定字符串的相同值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的SHA1哈希值是否会永远返回给定字符串的相同值?相关的知识,希望对你有一定的参考价值。

我正在考虑改变我们加密密码的方法,使用单向哈希而不是加密。我考虑在密码字符串上使用简单的“GetHashCode”,但MS警告此函数将来可能会更改,并且在32位和64位操作系统上有所不同。我不希望结果有所不同,因为这会导致数据库中的所有密码在输入值时不再匹配(例如,当我们都移动到.NET 9.0或其他东西时)。

那么,SHA1哈希是否消除了这个问题?例如,如果我使用这个C#代码:

        var data = System.Text.Encoding.ASCII.GetBytes(value);
        data = System.Security.Cryptography.SHA1.Create().ComputeHash(data);
        return Convert.ToBase64String(data);

这个价值永远是永远相同的结果吗?我并不太担心这个大空间的碰撞,但还有其他理由考虑更广泛的哈希吗?提前致谢!

答案

是。

与GetHashCode不同,SHA-1是一种固定算法,就像MD5和SHA-256一样,所有这些算法都已经“标准化”。

另一答案

是。 SHA1是标准,C#实现必须符合标准并产生相同的结果。

对于您的信息,SHA1不是一种很好的哈希密码方法,尽管它肯定是对可逆加密的重大改进。与MD5一样,SHA1设计用于非常快速地散列大量数据,因此非常适合强制密码破解。密码的最佳散列函数设计为(相对)慢或速度可调,并且很难用硬件加速。构建在.NET框架中的是PBKDF2,它基本上实现了“拉伸”SHA1(将SHA1反复应用于相同的输入,因此需要更长时间。)它在this framework class.中实现

以上是关于C#中的SHA1哈希值是否会永远返回给定字符串的相同值?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 40 个字符的 SHA1 哈希转换为 20 个字符的 SHA1 哈希?

SHA1 哈希值是不是均匀分布?

git 如何计算文件哈希?

如何生成随机 SHA1 哈希以用作 node.js 中的 ID?

将从 SHA1 返回的 unsigned char* 转换为字符串

redis哈希操作