【发布时间】:2013-12-20 17:10:05
【问题描述】:
我有一个 Excel 工作簿,目前用作预订日记。它的用户/密码存储在数据库中,密码使用 SHA1 进行哈希处理(目前没有盐以使这更容易)
当我使用密码 password 存储用户时,我在数据库中得到以下哈希:
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
这是通过尝试字符串 here 和 here 来备份的,两者都给出与我的 VBA SHA1 函数相同的结果
所以现在我想将此应用程序移动到 C# 中(最终可能是 ASP.NET Web 应用程序),所以我使用以下内容来生成 SHA1 哈希:
// Convert plain text into a byte array
byte[] plainTextBytes = Encoding.Default.GetBytes("password");
// Define hash object
HashAlgorithm hash = new SHA1Managed();
// Compute hash value of our plain text
byte[] hashBytes = hash.ComputeHash(plainTextBytes);
// Convert result into a base64-encoded string
string hashValue = Convert.ToBase64String(hashBytes);
Console.WriteLine(hashValue);
但是这个输出
W6ph5Mm5Pz8GgiULbPgzG37mj9g=
我一定是做错了一些小事,但我不知道它是什么:(。我尝试了不同的编码类型(UTF8、ASCII、Unicode),但都没有产生正确的哈希
有人可以帮我解释一下吗?
【问题讨论】:
-
你应该避免
Encoding.Default。这是系统特定的,在不同的系统上可能会有所不同。在这种情况下,对于任何包含非 ASCII 字符的密码,它可能会产生不同的结果。 UTF-8 几乎总是您想要的,尽管您可能想检查旧系统中使用的是哪种编码。
标签: c# hash cryptography sha1