C# SHA1Managed不';无法生成所需的SHA1哈希

C# SHA1Managed不';无法生成所需的SHA1哈希,c#,hash,cryptography,sha1,C#,Hash,Cryptography,Sha1,我有一个Excel工作簿,目前用作预订日志。它将用户/密码存储在数据库中,使用SHA1对密码进行散列(目前不含盐以简化此操作) 当我使用密码password存储用户时,我在数据库中得到以下哈希值: 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 这是通过尝试字符串和来备份的,两者都给出与我的VBA SHA1函数相同的结果 因此,现在我想将此应用程序移动到C#(最终可能是ASP.NET web应用程序),因此我使用以下方法生成SHA1哈希: // Convert

我有一个Excel工作簿,目前用作预订日志。它将用户/密码存储在数据库中,使用SHA1对密码进行散列(目前不含盐以简化此操作)

当我使用密码password存储用户时,我在数据库中得到以下哈希值:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

这是通过尝试字符串和来备份的,两者都给出与我的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),但没有一种产生正确的哈希


有人能帮我解释一下吗?

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

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

 string hashValue = Convert.ToBase64String(hashBytes);
这就是问题所在,您引用的结果字符串不是base64编码的,而是十六进制编码的。您可以使用以下代码获得所需的值:

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

“5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”


您应该避免使用
编码。默认值为
。这是特定于系统的,在不同的系统上可能会有所不同。在这种情况下,对于任何包含非ASCII字符的密码,可能会产生不同的结果。UTF-8几乎总是您想要的,尽管您可能希望检查旧系统中使用的编码。