SHA256 из визуально похожих строк отличается от Bash vs Python

Я пытаюсь создать заголовок AWS Signature v4 Auth для вызова STSGetCallerIdentity 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
Другие вопросы по тегам