BSD unix md5哈希位值

时间:2017-04-22 07:53:30

标签: unix hash md5

非常简单的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位= 16bytes哈希值。

然后,当我在unix / macos或MD5 online generator中使用md5脚本时,它生成32个字符长哈希,即32字节。 (1 char = 1字节是我的理解)

例如

$ 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工具)中遗漏的内容。

1 个答案:

答案 0 :(得分:1)

md5的输出是十六进制的,也称为16位。在这种格式中,一个字节显示为2个字符;一个16字节的哈希显示为一个32个字符的字符串。