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

问题描述 投票:4回答:2

我正在考虑改变我们加密密码的方法,使用单向哈希而不是加密。我考虑在密码字符串上使用简单的“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);

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

c# hash sha1
2个回答
12
投票

是。

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


4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.