我正在我的.net和Java应用程序中计算哈希值。但是当他们给我结果时我遇到了一个问题,因为两者给出了不同的结果。在搜索这个问题时,我发现了这些问题
question 1和 question 2所以根据他们的答案申请了那里,但不幸的是我没有成功。我也尝试过 UTF-8
和UTF-16LE
但结果又不一样了。
现在我陷入困境,想知道为什么会发生以及如何解决这个问题
下面给出了我的代码片段
.Net强>
byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes);
Java
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] buffer2 = sha1.digest(bytes);
任何帮助将不胜感激。
最佳答案
我认为问题是在 C# 中 byte 是无符号类型,而在 java 中则不是。
这两个代码的作用相同:
public static void main(String[] args) throws NoSuchAlgorithmException {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] bytes = new byte[] { 1, 2, 10 };
byte[] buffer2 = sha1.digest(bytes);
for(byte b : buffer2){
System.out.println(b);
}
}
static void Main(string[] args)
{
var bytes = new byte[] { 1, 2, 10 };
var buffer = new SHA1CryptoServiceProvider().ComputeHash(bytes);
foreach (var b in buffer)
{
Console.WriteLine((sbyte)b); //attention to cast
}
Console.Read();
}
关于c# - java 和 c# 的 SHA1 哈希计算未返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741676/