在 Java 和 C# 中计算 SHA-1 哈希值
我正在尝试在 C# 应用程序中复制 Java 应用程序的逻辑。其中一部分涉及生成密码的 SHA-1 哈希值。不幸的是我无法从 Java 和 C# 获得相同的结果。
C# Output : 64 0a b2 ba e0 7b ed c4 c1 63 f6 79 a7 46 f7 ab 7f b5 d1 fa
Java Output: 164 10a b2 ba e0 17b ed c4 c1 163 f6 179 a7 146 f7 ab 17f b5 d1 fa
为了尝试弄清楚发生了什么,我一直在 Eclipse 和 Visual Studio 中使用调试器。
1. Check values of byte[] key:
Java: { 84, 101, 115, 116 }
C# : { 84, 101, 115, 116 }
2. Check value of byte[] hash:
Java: { 100 10 -78 -70 -32 123 ... }
C# : { 100 10 78 186 224 123 ... }
我已经阅读了有关该主题的其他帖子,其中大部分涉及输入字符串编码,但这些似乎对我没有帮助。我的猜测是,这与有符号字节和无符号字节有关,但我在这条路上没有取得太大进展。任何帮助将不胜感激。
Thanks,
Karle
Java版本:
public void testHash() {
String password = "Test";
byte[] key = password.getBytes();
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] hash = md.digest(key);
String result = "";
for ( byte b : hash ) {
result += Integer.toHexString(b + 256) + " ";
}
System.out.println(result);
}
C# 版本:
public void testHash() {
String password = "Test";
byte[] key = System.Text.Encoding.Default.GetBytes(password);
SHA1 sha1 = SHA1Managed.Create();
byte[] hash = sha1.ComputeHash(key);
String result;
foreach ( byte b in hash ) {
result += Convert.ToInt32(b).ToString("x2") + " ";
}
Console.WriteLine(result);
}