C# SHA1哈希计算不返回java和c的相同结果#
我在我的.net和Java应用程序中计算哈希值。但是当他们给我结果时,我遇到了一个问题,因为他们都给出了不同的结果。在搜索这个问题时,我发现了这些问题,并根据他们的答案进行了应用,但不幸的是我没有成功。我也尝试了C# SHA1哈希计算不返回java和c的相同结果#,c#,java,.net,sha1,C#,Java,.net,Sha1,我在我的.net和Java应用程序中计算哈希值。但是当他们给我结果时,我遇到了一个问题,因为他们都给出了不同的结果。在搜索这个问题时,我发现了这些问题,并根据他们的答案进行了应用,但不幸的是我没有成功。我也尝试了UTF-8和UTF-16LE,但结果还是不一样。 现在我陷入困境,想知道为什么会发生这种情况,以及如何解决这个问题下面给出了我的代码片段.Net byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes); J
UTF-8
和UTF-16LE
,但结果还是不一样。
现在我陷入困境,想知道为什么会发生这种情况,以及如何解决这个问题
下面给出了我的代码片段
.Net
byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes);
Java
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] buffer2 = sha1.digest(bytes);
任何帮助都将不胜感激。我认为问题在于,在C#中,字节是无符号类型,而在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中则不是 这两种代码同样适用:
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();
}
所以,我只是简单地回顾一下我的评论作为一个答案。 见此:
基本上,Java字节是有符号的,而C#字节不是。
这两个结果的内部表示形式是相同的,但除非进行适当的转换,否则打印它们将产生不同的结果。因此,请简要回顾一下我的评论作为答案。 见此:
基本上,Java字节是有符号的,而C#字节不是。
两个结果的内部表示形式相同,但除非进行适当的转换,否则打印它们将产生不同的结果。可能是endianness的问题?您看到了吗?在这两种情况下,
字节的值是多少?不,我没有找到。。让我检查一下它们是否有相同的值。。。他们有什么不同?也许问题出在endianness?你看到了吗?在这两种情况下,字节的值是多少?不,我没有找到。。让我检查一下它们是否有相同的值。。。它们有何不同?