为什么Python创建的MD5哈希值与shell中使用echo和md5sum创建的哈希值不同?

mai*_*lGO 107 python shell md5sum

Python MD5哈希与shell上md5sum命令创建的哈希不同.为什么?

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


$ echo mystringforhash | md5sum
686687dd68c5de717b34569dbfb8d3c3  - # Result on the shell
Run Code Online (Sandbox Code Playgroud)

Thi*_*ter 195

echo附加一个,\n因为你通常不希望你的shell中没有以换行符结尾的行(如果提示不在最左边开始,它看起来真的很难看).
使用-n参数省略尾随换行符,它将打印与python脚本相同的校验和:

> echo -n mystringforhash | md5sum
86b6423cb6d211734fc7d81bbc5e11d3  -
Run Code Online (Sandbox Code Playgroud)

  • 实际上,当我告诉人们使用更多Python或更高级别的语言而不是shell脚本来进行通常被认为在shell脚本中做得更好的工作时,这是我使用的一个重要示例.混合数据和代码的性质以及每个命令的不同语法都会使shell脚本不可避免地容易出错 (52认同)
  • 如果只给出了"shell",你就不能相信`echo`有一个可行的`-n`标志.POSIX说关于`echo`:"如果第一个操作数是`-n`,或者如果任何操作数包含一个`<反斜杠>`字符,则结果是实现定义的." (来源:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html).请改用"printf". (7认同)
  • @Punnerud:不。`md5sum`的输出在这里并不重要。输入确实如此。如果没有“-n”,echo 会附加一个换行符,这会导致不同的哈希值。 (2认同)