2012-12-06 72 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#字節不是。 兩種結果的內部表示方式都是相同的,但打印它們會產生不同的結果,除非您進行適當的轉換。