我正在尝试构造一个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。
答案 0 :(得分:2)
看看您如何用Python计算它可能会有所帮助。从我所看到的,看起来输出是相同的。
$ python -c "import hashlib; \
print(hashlib.sha256('test'.encode('utf8')).digest().hex())"
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
$ printf "%s" test | openssl dgst -sha256
(stdin)= 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08