SHA256 из визуально похожих строк отличается от Bash vs Python
Я пытаюсь создать заголовок AWS Signature v4 Auth для вызова STS
GetCallerIdentity
API в соответствии с документацией по адресу https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html в Bash.
Теперь у меня тот же процесс, работающий в Python, и после тщательного изучения моих скриптов и выводов в Python и Bash я вижу, что SHA256, рассчитанный в Bash для строки, отличается от вычисленного в Python.
Строки выглядят одинаково в моем текстовом редакторе - символ за символом.
Но так как SHA256 отличается, я предполагаю, что это большая проблема с кодированием строки.
Скрипт Python использует UTF8, и хотя я пытался сделать printf "%s" "${string}" | iconv -t utf-8 | openssl dgst -sha256
в скрипте Bash значения хеш-функции все еще различаются.
Как преобразовать строки / переменные bash в UTF8 перед вычислением суммы SHA256.
1 ответ
Может быть полезно увидеть, как вы рассчитываете это в Python. Из того, что я вижу, похоже, что результат такой же.
$ python -c "import hashlib; \
print(hashlib.sha256('test'.encode('utf8')).digest().hex())"
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
$ printf "%s" test | openssl dgst -sha256
(stdin)= 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08