【发布时间】:2011-07-23 04:35:57
【问题描述】:
我正在考虑更改加密密码的方法,以使用单向哈希而不是加密。我考虑在密码字符串上使用一个简单的“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);
值会永远是相同的结果吗?我不太担心在这么大的空间中发生碰撞,但还有其他理由考虑更广泛的散列吗?提前致谢!
【问题讨论】:
-
是的 sha1 md5 将保持不变......虽然 sha1 和 sha2 会有所不同,但这就是它们存在的主要原因!!
-
我建议你切换到 UTF8 编码,因为 ASCII 迟早会让你不开心。 ASCII 也应该死。