2012-12-06 73 views
0

我在我的.net和Java应用程序中计算哈希。但是,当他们给我结果,因为两者都给出不同的结果时,我遇到了一个问题。在搜索这个问题时,我发现这些问题
question 1question 2所以在那里根据他们的答案适用,但不幸的是我没有得到成功。我也试过UTF-8UTF-16LE但结果再次不一样。
现在我卡住了,想知道为什么它正在发生,我该如何解决以下
.net中,此
我的代码片段给出

SHA1哈希计算不回应相同的结果为java和c#

byte[] buffer2 = new SHA1CryptoServiceProvider().ComputeHash(bytes); 


的Java

MessageDigest sha1 = MessageDigest.getInstance("SHA1"); 
     byte[] buffer2 = sha1.digest(bytes); 

任何帮助将不胜感激。

+0

也许问题是在endianness? – Vlad

+4

你有看到这个吗? http://stackoverflow.com/questions/6843698/calculating-sha-1-hashes-in-java-and-c-sharp –

+0

这两种情况下'bytes'的值是什么? –

回答

3

我认为问题在于C#字节是无符号类型,而在java中它不是。

这2码的效果一样:

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(); 
    } 
2

所以只要回顾一下我的意见作为一个答案。 看到这个:Calculating SHA-1 hashes in Java and C#
基本上 - Java字节被签名,而C#字节不是。 两种结果的内部表示方式都是相同的,但打印它们会产生不同的结果,除非您进行适当的转换。