如何在不添加尾随 '\n' 的情况下散列字符串?

How to hash a string without adding a trailing '\n' to it?

我正在尝试在 python 和 shell 中使用 md5(OSX 上的 zsh)。

我明白了:

在python中:

>>> hashlib.md5("zoo".encode('utf-8')).hexdigest()
'd2cbe65f53da8607e64173c1a83394fe'

使用 Zsh :

$ echo "zoo" | md5
ace34ff0a763d9f382cbe6b219fcac7c

因为我还有:

>>> hashlib.md5("zoo\n".encode('utf-8')).hexdigest()
'ace34ff0a763d9f382cbe6b219fcac7c'

在 Python 中,我认为我的 zsh 命令在散列之前向字符串添加了一个(不需要的)尾随 '\n'。

为什么会发生这种情况,我该如何避免这种情况?

我刚知道:

md5 命令有一个 -s 标志,允许将参数直接作为字符串传递。

所以 :

$ md5 -s "zoo"
MD5 ("zoo") = d2cbe65f53da8607e64173c1a83394fe

真蠢,我的坏蛋。

给你:

kent$  echo -n 'zoo'|md5sum
d2cbe65f53da8607e64173c1a83394fe

kent$  echo  'zoo'|md5sum 
ace34ff0a763d9f382cbe6b219fcac7c