我目前正在使用Excel工作簿作为预订日记。它有用户/密码存储在数据库中,使用SHA1对密码进行哈希处理(目前没有盐可以使这更容易)
当我存储密码为密码的用户时,我在数据库中获得以下哈希:
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),但没有产生正确的哈希
有人可以帮我解释一下吗?
答案 0 :(得分:3)
您将字符串转换为base64,尽管您似乎想要十六进制。改为转换为十六进制。
答案 1 :(得分:3)
您应该将hashBytes转换为HexString,而不是Base64。
答案 2 :(得分:2)
string hashValue = Convert.ToBase64String(hashBytes);
这是问题陈述,你引用的结果字符串不是base64编码的,它是用十六进制编码的。您可以获得所需的价值:
string hashValue = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
产生:
“5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”