MessageDigest digest()方法

时间:2011-09-26 10:30:28

标签: java encryption md5

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()方法

1 个答案:

答案 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"));