BSD unix md5 哈希位值
BSD unix md5 hash bit value
很简单的CS题。我正在阅读 MD5 documentation, RFC 1321 上面写着
The algorithm takes as input a message of arbitrary length and
produces as output a 128-bit "fingerprint" or "message digest" of the input.
它说 MD5 为给定的输入生成 128 位=16 字节的散列。
然后,当我在 unix/macos 或 MD5 online generator 中使用 md5
脚本时,它会生成 32 个字符长的散列,即 32 字节。 (1 char = 1 byte 是我的理解)
例如
$ md5 <<<"1"
b026324c6904b2a9cb4b88d6d61c81d1
$ printf "b026324c6904b2a9cb4b88d6d61c81d1" | wc -c
32
但是当我尝试使用 java
MD5 api 时,它给了我 16 字节的哈希值,根据文档这是正确的。
scala> import java.security.MessageDigest
import java.security.MessageDigest
scala> MessageDigest.getInstance("MD5").digest("1".getBytes)
res0: Array[Byte] = Array(-60, -54, 66, 56, -96, -71, 35, -126, 13, -52, 80, -102, 111, 117, -124, -101)
scala> val hash = MessageDigest.getInstance("MD5").digest("1".getBytes("UTF-8")).length
hash: Int = 16
问题是我缺少 md5
(BSD unix 工具)。
md5 的输出是十六进制,也称为基数 16。在这种格式中,一个字节显示为 2 个字符; 16 字节的散列显示为 32 字符的字符串。
很简单的CS题。我正在阅读 MD5 documentation, RFC 1321 上面写着
The algorithm takes as input a message of arbitrary length and
produces as output a 128-bit "fingerprint" or "message digest" of the input.
它说 MD5 为给定的输入生成 128 位=16 字节的散列。
然后,当我在 unix/macos 或 MD5 online generator 中使用 md5
脚本时,它会生成 32 个字符长的散列,即 32 字节。 (1 char = 1 byte 是我的理解)
例如
$ md5 <<<"1"
b026324c6904b2a9cb4b88d6d61c81d1
$ printf "b026324c6904b2a9cb4b88d6d61c81d1" | wc -c
32
但是当我尝试使用 java
MD5 api 时,它给了我 16 字节的哈希值,根据文档这是正确的。
scala> import java.security.MessageDigest
import java.security.MessageDigest
scala> MessageDigest.getInstance("MD5").digest("1".getBytes)
res0: Array[Byte] = Array(-60, -54, 66, 56, -96, -71, 35, -126, 13, -52, 80, -102, 111, 117, -124, -101)
scala> val hash = MessageDigest.getInstance("MD5").digest("1".getBytes("UTF-8")).length
hash: Int = 16
问题是我缺少 md5
(BSD unix 工具)。
md5 的输出是十六进制,也称为基数 16。在这种格式中,一个字节显示为 2 个字符; 16 字节的散列显示为 32 字符的字符串。