Есть ли сценарий bash для генерации HMAC-SHA1
хэша?
Я ищу что-то эквивалентное следующему PHP-коду:
hash_hmac("sha1", "value", "key");
Я понимаю, что это не совсем то, о чем вы просите, но нет смысла изобретать колесо и писать версию для bash.
Вы можете просто использовать эту openssl
команду для генерации хэша в вашем скрипте.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Или просто:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Не забудьте использовать -n
with, echo
иначе к строке будет добавлен символ разрыва строки, что изменит ваши данные и хэш.
Эта команда поступает из пакета OpenSSL, который уже должен быть установлен (или легко установлен) в Linux / Unix, Cygwin и т.п.
Обратите внимание, что более старые версии openssl
(например, поставляемые с RHEL4) могут не предоставлять такую -hmac
возможность.
В качестве альтернативного решения, но в основном для того, чтобы доказать, что результаты такие же, мы также можем вызвать PHP hmac_sha1()
из командной строки:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
заменено наsha256
:-)openssl genrsa
? Кроме того, ссылка на документацию openssl приводит кВот функция bash, которая работает как
hash_hmac
PHP:#!/bin/bash function hash_hmac { digest="$1" data="$2" key="$3" 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 "sha1" "$(cat your-json-file)" "key"
. В качестве альтернативы вы можете просто пропустить свой файлopenssl dgst
без использования этойhash_hmac
функции.Спасибо за функцию 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/^.* //'
Тогда следующий вызов должен будет предоставить ключ в виде шестнадцатеричного числа:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
Надеюсь, это поможет любому, возможно, тому, кто пытается создать сценарии bash для аннулирования записей CloudFront на AWS (например, я!) (Я еще не тестировал это, но я думаю, что это причина того, почему мой сценарий bash не работает, а мой PHP работает ...)
источник
Установив node.js, вы можете использовать инструмент HMAC-CLI :
npx hmac-cli generate 'value' -h sha1 -s key
возвращает:
источник
Тем, кто любит больше изучать JWT из командной строки: классный скрипт jwt bash
источник