MessageDigest中的digest()方法是否应始终为同一输入提供相同的哈希值?
我试过这个,每次都为同一个输入获得不同的哈希值集
md5 = MessageDigest.getInstance("MD5");
System.out.println(md5.digest("stringtodigest".getBytes()));
System.out.println(md5.digest("stringtodigest".getBytes()));
System.out.println(md5.digest("stringtodigest".getBytes()));
更新:将参数更改为digest()方法
答案 0 :(得分:13)
您正在看到调用byte[].toString()
的结果 - 它没有显示数据的实际哈希值。你基本上得到一个字符串,表明你在字节数组(即toString
部分)上调用了[B
,然后是Object.hashCode()
返回的哈希值(这是后面的十六进制值) @
)。该哈希代码不会考虑数组中的数据。
尝试
System.out.println(Arrays.toString(md5.digest(byteArrayToDigest)));
查看实际的数据。
编辑:关于从字符串数据创建MD5摘要的快速说明 - 在散列时,应始终明确使用相同的编码。例如:
byte[] hash = md5.digest(text.getBytes("UTF-8"));