您好,我編寫了一個類來為字符串輸入創(chuàng)建哈希,但我的程序有時會為兩個不同的輸入提供相同的哈希。import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class Test {public byte[] Hash(String input) throws NoSuchAlgorithmException{ MessageDigest messageDigest = MessageDigest.getInstance("MD5"); byte b[] = messageDigest.digest(input.getBytes()); return b;}public static void main(String args[]) throws NoSuchAlgorithmException{ Test t = new Test(); byte[] hashValue = t.Hash("viud"); String hashString = hashValue.toString(); while(hashString.length()<32) { hashString = "0" + hashString; } System.out.println(hashString);}}當我對函數(shù) Hash() 的輸入為“viud”時,我得到的結果為 --> 0000000000000000000000[B@13e8c1c 當我的輸入字符串為“Hello”時,我得到的結果為 --> 0000000000000000000000[B@ 13e8c1c但這種情況在程序執(zhí)行時只發(fā)生幾次。每次運行該程序時,我都會為相同的輸入值生成不同的哈希值,有時還會為兩個不同的輸入獲取相同的哈希值。究竟發(fā)生了什么?
1 回答

MM們
TA貢獻1886條經(jīng)驗 獲得超2個贊
byte[] hashValue = t.Hash("viud"); String hashString = hashValue.toString();
byte[] 上的 toString 將為您提供 byte[] 的內存(堆)地址。這不是你想要的。你要
String hashString = new String(t.Hash("viud"));
添加回答
舉報
0/150
提交
取消