0

我正在尝试根据https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.htmlSTS GetCallerIdentity的文档构建一个 AWS Signature v4 Auth 标头来调用 API重击。

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

字符串在我的文本编辑器中看起来是一样的——一个字符一个字符。

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

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

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

4

1 回答 1

3

了解您如何在 Python 中计算它可能会有所帮助。从我所见,看起来输出是相同的。

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

$ printf "%s" test | openssl dgst -sha256
(stdin)= 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
于 2019-02-17T04:47:07.850 回答