Existe-t-il un script bash pour générer un HMAC-SHA1
hachage?
Je recherche quelque chose d'équivalent au code PHP suivant:
hash_hmac("sha1", "value", "key");
Je me rends compte que ce n'est pas exactement ce que vous demandez, mais il ne sert à rien de réinventer la roue et d'écrire une version bash.
Vous pouvez simplement utiliser la openssl
commande pour générer le hachage dans votre script.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Ou simplement:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
N'oubliez pas d'utiliser -n
avec, echo
sinon un caractère de saut de ligne est ajouté à la chaîne et cela change vos données et le hachage.
Cette commande provient du package OpenSSL qui devrait déjà être installé (ou facilement installé) dans votre choix de Linux / Unix, Cygwin et autres.
Notez que les anciennes versions de openssl
(comme celle livrée avec RHEL4) peuvent ne pas fournir cette -hmac
option.
Comme solution alternative, mais principalement pour prouver que les résultats sont les mêmes, nous pouvons également appeler PHP hmac_sha1()
depuis la ligne de commande:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
est remplacée parsha256
:-)openssl genrsa
? De plus, le lien de documentation openssl donne un 404.Voici une fonction bash qui fonctionne comme
hash_hmac
depuis PHP:la source
hash_hmac "sha1" "$(cat your-json-file)" "key"
. Sinon, vous pouvez simplement diriger votre fichieropenssl dgst
sans utiliser cettehash_hmac
fonction.Merci pour la fonction hash_hmac! Mais ce n'était pas suffisant pour ma candidature. Au cas où quelqu'un se poserait la question, j'ai dû re-hacher des trucs plusieurs fois en utilisant une clé qui était le résultat du hachage précédent, et donc une entrée binaire. (La signature d'authentification Amazon AWS est créée comme ceci.)
Donc, ce dont j'avais besoin était un moyen de fournir la clé binaire d'une manière qui ne briserait pas l'algorithme. Ensuite, j'ai trouvé ceci: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
La réponse de Stephen Henson nécessite que la fonction hash_hmac renvoie la valeur au format hexadécimal. Il doit donc faire écho à ce qui suit:
Ensuite, le prochain appel devra fournir la clé sous forme d'hexit:
Espérons que cela aide n'importe qui, probablement quelqu'un qui essaie de créer des scripts bash pour invalider les entrées CloudFront sur AWS (comme moi!) (Je ne l'ai pas encore testé, mais je pense que c'est la raison pour laquelle mon script bash ne fonctionne pas, et mon PHP fonctionne ...)
la source
Pour ceux qui aiment explorer plus JWT sur la ligne de commande: cool script jwt bash
la source