HMAC-SHA1 в Баш
есть ли скрипт bash для создания HMAC-SHA1
хэш?
Я ищу что-то эквивалентное следующий PHP код:
hash_hmac("sha1", "value", "key");
4 ответа:
Я понимаю, что это не совсем то, что вы просите, но нет смысла изобретать колесо и писать на bash версии.
вы можете просто использовать
openssl
команда для создания хэша в вашем скрипте.[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key" 57443a4c052350a44638835d64fd66822f813319
или просто:
[me@home] echo -n "value" | openssl sha1 -hmac "key" 57443a4c052350a44638835d64fd66822f813319
не забывайте использовать
-n
Сecho
или же к строке добавляется символ разрыва строки, который изменяет ваши данные и хэш.эта команда приходит из пакета OpenSSL, который уже должен быть установлен (или установлен) в выборе Linux и Unix, Cygwin и любит.
обратите внимание, что более старые версии
openssl
(например, поставляемый с RHEL4) не может обеспечить .
в качестве альтернативного решения, но в основном, чтобы доказать, что результаты одинаковы, мы также можем вызвать PHP
hmac_sha1()
из командной строки:[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php 57443a4c052350a44638835d64fd66822f813319
вот функция bash, которая работает как
hash_hmac
из PHP:#!/bin/bash function hash_hmac { digest="" data="" key="" shift 3 echo -n "$data" | openssl dgst "-$digest" -hmac "$key" "$@" } # hex output by default hash_hmac "sha1" "value" "key" # raw output by adding the "-binary" flag hash_hmac "sha1" "value" "key" -binary | base64 # other algos also work hash_hmac "md5" "value" "key"
Спасибо за функцию hash_hmac! Но этого оказалось недостаточно для моего заявления. В случае, если кто-то задавался вопросом, мне пришлось повторно хэшировать материал несколько раз, используя ключ, который был результатом предыдущего хэширования, и поэтому является двоичным входом. (Подпись аутентификации Amazon AWS создается следующим образом.)
Так что мне нужен был способ поставить двоичный ключ каким-то образом, что бы не нарушить алгоритм. Затем я нашел это: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
ответ Стивена Хенсона требует, чтобы функция hash_hmac возвращала значение в шестнадцатеричном формате. Поэтому он должен повторять следующее:
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
тогда следующий вызов должен будет предоставить ключ в виде hexit:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
надеюсь, это поможет кому - нибудь, возможно, кто-то, кто пытается создать сценарии bash, чтобы аннулировать записи CloudFront на AWS (например, я!(У меня нет тестировал его еще, но я думаю, что это то, что является причиной того, почему мой скрипт bash не работает, а мой PHP-один...)
для тех, кто любит исследовать больше JWT в командной строке: классный скрипт JWT bash