如何在Python3和Mac / Linux终端中获得相同的哈希?

时间:2018-04-15 19:17:18

标签: python python-3.x macos hashlib

如何在终端(Mac / Linux)和Python中获得相同的sha256哈希?

尝试了以下示例的不同版本,并在StackOverflow上搜索。

终端:

echo 'test text' | shasum -a 256

c2a4f4903509957d138e216a6d2c0d7867235c61088c02ca5cf38f2332407b00

Python3:

import hashlib
hashlib.sha256(str("test text").encode('utf-8')).hexdigest()

'0f46738ebed370c5c52ee0ad96dec8f459fb901c2ca4e285211eddf903bf1598'

更新: 与Why is an MD5 hash created by Python different from one created using echo and md5sum in the shell?不同,因为在Python3中你需要显式编码,我需要Python中的解决方案,而不仅仅是在终端中。 “复制”不适用于文件:

example.txt内容:

test text

终端:

shasum -a 256 example.txt

c2a4f4903509957d138e216a6d2c0d7867235c61088c02ca5cf38f2332407b00

1 个答案:

答案 0 :(得分:8)

内置的echo将添加一个尾随的换行符,产生一个不同的字符串,从而产生一个不同的散列。这样做

echo -n 'test text' | shasum -a 256

如果你确实打算对新行进行哈希处理(我建议不要这样做,因为它违反POLA),它需要在python中修复,如此

hashlib.sha256("{}\n".format("test text").encode('utf-8')).hexdigest()