MessageDigest digest()方法

jav*_*eek 3 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()));
Run Code Online (Sandbox Code Playgroud)

更新:将参数更改为digest()方法

Jon*_*eet 13

你看到了调用的结果byte[].toString()- 这没有显示数据的实际哈希值.你基本上得到一个字符串,表明你已经调用toString了一个字节数组(这是[B部分),然后是返回的哈希值Object.hashCode()(这是后面的十六进制值@).该哈希码不会考虑数组中的数据.

尝试

System.out.println(Arrays.toString(md5.digest(byteArrayToDigest)));
Run Code Online (Sandbox Code Playgroud)

查看实际数据.

编辑:关于从字符串数据创建MD5摘要的快速说明- 在散列时,应始终明确使用相同的编码.例如:

byte[] hash = md5.digest(text.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)