2012-03-09 76 views
3

散列密碼我產生具有salt.My碼的密碼的哈希值:通過提供作爲種子以毫秒爲單位的當前時間使用鹽

`String psw="hello"; 
    String tobehashed=""; 
    tobehashed=salt+psw; 
    MessageDigest md = MessageDigest.getInstance("SHA-256"); 
    byte[] digest = md.digest(tobehashed.getBytes()); 
    System.out.println("Digest:"+digest);` 

我已生成的鹽,我有鹽沒有問題(I m得到隨機值),但不管鹽我得到相同的哈希值。

實際上鹽的目的是獲得不同的哈希值.. 這是我的輸出; Random nubr:-2098016229(this keeps changing) Digest:[[email protected](this remains same) Waht是解決方案?

回答

4

要打印出來的digest.toString()的結果,其在字節陣列的情況下確實字節轉換成有意義的輸出。它只打印[B(這是字節數組的代碼),@,然後是十六進制地址。隨着Java獲得更多的經驗,您會經常看到這個輸出。

您將需要使用循環遍歷摘要中的字節並逐個打印它們。

+0

謝謝,它的工作,我得到不同的值,如果我迭代循環.. – user10101 2012-03-09 10:05:49

+0

但如果我需要比較後面的哈希值,我必須通過迭代循環比較兩個哈希值。是嗎? – user10101 2012-03-09 10:07:14

+0

@ user1258724:請參閱http://stackoverflow.com/questions/630808/compare-two-arrays-of-primitives-in-java獲取答案。 – 2012-03-09 10:10:51

4

B @ ca0b6不是字節數組的內容,它是toString()表示。迭代數組的字節並單獨打印。

+0

但如果我需要比較後面的散列值,我必須通過迭代循環來比較兩個散列值。它是正確的嗎? – user10101 2012-03-09 10:11:26

0

如果您打印任何參考變量,然後System.out.println()函數運行toString()函數來自對象類。 toString()的輸出顯示爲printf() ..
默認toString()返回你的ref對象的HaxCode。
如果你想改變它,那麼你必須在各自的class.

digest.toString(); 

只是打印十六進制地址重寫toString()。 所以你必須使用迭代數組的字節,並單獨打印它們...