为什么Python生成的MD5哈希与使用echo和md5sum在终端中生成的不同?

116 投票
1 回答
11775 浏览
提问于 2025-04-16 15:54

Python中的MD5哈希和在命令行中用md5sum命令生成的哈希是不同的。为什么会这样呢?

>>> import hashlib
>>> h = hashlib.md5()
>>> h.update("mystringforhash")
>>> print h.hexdigest()
86b6423cb6d211734fc7d81bbc5e11d3 # Result from Python


$ echo mystringforhash | md5sum
686687dd68c5de717b34569dbfb8d3c3  - # Result on the shell

1 个回答

207

echo 命令会在输出的内容后面加上一个换行符(\n),因为在命令行中,通常不希望行末没有换行,这样看起来会很乱,提示符也不会从最左边开始。
如果你想去掉这个换行符,可以使用 -n 参数,这样输出的内容就不会有换行符了,这样输出的结果和你的 Python 脚本的校验和是一样的:

> echo -n mystringforhash | md5sum
86b6423cb6d211734fc7d81bbc5e11d3  -

撰写回答