【发布时间】:2018-03-03 21:41:32
【问题描述】:
在检查了这个问题 (How can I generate an MD5 hash?) 并阅读了 MessageDigest 文档后,我尝试散列一个简单的字符串。但是由于某种原因,我传递给该方法的每个字符串都返回相同的值。下面是我写的代码。
byte[] bytesOfMessage = "helloworld".getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);
System.out.println(thedigest);
还有没有限制我从哈希中得到的字符数?
【问题讨论】:
-
什么方法?你能分享重现问题所需的所有代码吗?
-
使用
System.out.println(Arrays.toString(thedigest))。您的代码实际上并没有打印数组的内容。 -
@JornVernee 当我将代码更改为该代码时,输出是一个包含整数的数组。
-
这就是数组的地址,如上所述。您需要将字节数组转换为字符串,如下所示: System.out.println(new String(thedigest));
-
@TobiasWeimer+OP:摘要实际上是随机位,因此
new String(byte[])使用与平台相关的默认字符集通常会丢弃或破坏大部分数据。最好使用 hex 或 base64,或者至少指定ISO-8859-1(又名 Latin-1),以便可靠地保留所有字节值。