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

Mar*_*ham 4 c# hash 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);
Run Code Online (Sandbox Code Playgroud)

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

Pet*_* O. 12

是.

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

  • @Jesus:实际上,这并不夸张.在赢得彩票后被公共汽车击中的几率大约只有2到60左右.使用256位加密哈希随机获得哈希冲突的可能性大约相当于万亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿亿次*.(如果你故意*寻找碰撞 - 无论是哈希碰撞还是公共汽车碰撞 - 当然,赔率完全不同.) (8认同)