2013-01-24 37 views
2

我在將字符串轉換爲字節數組以將其散列時出現了一個奇怪的問題。現在,我的代碼是這樣的:Java字符串到字節數組每次運行更改

String textToHash = "test"; 
    MessageDigest messageDigest = MessageDigest.getInstance("MD5"); 
    messageDigest.update(textToHash.getBytes("UTF-8")); 
    hash = messageDigest.digest(); 

即使字符串是一樣的,在不同的運行,改變(從textToHash.getBytes("UTF-8")生成)的字節數組。有時它會有一個值,而其他時候它會改變,即使字符串是靜態的。爲什麼會發生這種情況,我怎樣才能使它可靠地散列字符串?

謝謝!

+1

我覺得這是的「你認爲正在發生的是什麼是不是有什麼是真正發生」的情況下。對於給定的輸入字符串,String.getBytes應該返回相同的結果。究竟什麼導致你相信輸入字符串是相同的,但getBytes返回不同的結果? – davmac

+0

我的輸入字符串總是「測試」。當我打印「textToHash.getBytes」的值時,它有時會返回不同的值。 –

回答

1
+0

這仍然不起作用。它在散列之前就打破了。基本上它是getBytes調用不起作用。產生的字節數組是變化的。不是散列函數的輸出。 –

+0

@AndrewHassan對不起。你確定String.getBytes的byte []形式每次都不同嗎? plz粘貼測試用例 – farmer1992

+0

我沒有使用任何測試用例,只是調試。如果我打印或查看字節的值,它會不時輸出不同的值。這是我的輸出中的一個: '測試#0 字符串:測試 字節:[B @ 68111f9b 測試#1 字符串:測試 字節:[B @ 21c8dfe6 測試#2 字符串:測試 字節:[乙@ ae3865e 測試#3 字符串:測試 字節:[B @ 5f8a8ae7 測試#4 字符串:測試 字節:[B @ a574b2 測試#5 字符串:測試 字節:[B @ 6e905272 測試#6 字符串:測試 字節:[B @ 4514f313 測試#7 字符串:測試 字節:[B @ 626287d3 試驗#8 字符串:測試 字節:[B @ 32c3601b 試驗#9 字符串:測試 字節:[B @ 38daa6a6' –