2010-06-26 54 views
6

我無法弄清楚我在這裏做錯了什麼。我有以下代碼:MessageDigest SHA-512與openssl不同

byte[] digest = new byte[0]; 
MessageDigest md = null; 
try{ 
    md = MessageDigest.getInstance("SHA-512"); 
} 
catch(NoSuchAlgorithmException e) { 
    return digest; 
} 
digest = md.digest(myString.getBytes()); 

望着消化字節的十六進制值[]在NetBeans調試,它表明的東西比輸出不同:

echo "myString" | openssl dgst -sha512 

我猜這是一個字符編碼問題,但是JVM和openssl不使用機器的默認字符集?

任何幫助表示讚賞。

+0

字符編碼不應該是''myString''的問題,因爲這是純粹的ASCII。但是你可能想檢查'myString.getBytes()'的返回值,以確保。 – 2010-06-26 18:17:55

回答

7

echo附加在最後一個換行符 -

[[email protected]:~]% echo "myString" | hexdump -C 
00000000 6d 79 53 74 72 69 6e 67 0a      |myString.| 

嘗試echo -n

+2

就是這樣!你是一個bash忍者! 謝謝。 – Tim 2010-06-26 18:30:18

+0

太絆倒了我! – jpswain 2011-03-08 21:32:11