视觉相似的字符串的SHA256在Bash与Python中有所不同

时间:2019-02-17 04:32:58

标签: python bash utf-8 ascii aws-sts

我正在尝试构造一个AWS Signature v4 Auth标头,以按照Bash https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html上的文档调用STS GetCallerIdentity API。

现在,我在Python中使用相同的进程,仔细查看了我在Python和Bash中的脚本和输出后,我发现在Bash中为字符串计算的SHA256与在Python中计算的SHA256不同。

字符串外观在我的文本编辑器中相同-逐字符。

但是由于SHA256有所不同,我假设这很大程度上是字符串编码的问题。

Python脚本使用UTF8,即使我尝试在Bash脚本中进行printf "%s" "${string}" | iconv -t utf-8 | openssl dgst -sha256,哈希值仍然不同。

在计算SHA256和之前,如何将bash字符串/变量转换为UTF8。

1 个答案:

答案 0 :(得分:2)

看看您如何用Python计算它可能会有所帮助。从我所看到的,看起来输出是相同的。

$ python -c "import hashlib; \
print(hashlib.sha256('test'.encode('utf8')).digest().hex())"
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

$ printf "%s" test | openssl dgst -sha256
(stdin)= 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08