SHA1Managed不会产生预期的SHA1哈希值

时间:2013-12-04 09:31:13

标签: c# hash cryptography sha1

我目前正在使用Excel工作簿作为预订日记。它有用户/密码存储在数据库中,使用SHA1对密码进行哈希处理(目前没有盐可以使这更容易)

当我存储密码为密码的用户时,我在数据库中获得以下哈希:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

通过尝试字符串herehere进行备份,两者都提供与我的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),但没有产生正确的哈希

有人可以帮我解释一下吗?

3 个答案:

答案 0 :(得分:3)

您将字符串转换为base64,尽管您似乎想要十六进制。改为转换为十六进制。

答案 1 :(得分:3)

您应该将hashBytes转换为HexString,而不是Base64。

答案 2 :(得分:2)

 string hashValue = Convert.ToBase64String(hashBytes);

这是问题陈述,你引用的结果字符串不是base64编码的,它是用十六进制编码的。您可以获得所需的价值:

 string hashValue = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

产生:

  

“5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”