Existe-t-il un script bash pour générer un hachage HMAC-SHA1
?
Je cherche 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 est inutile de réinventer la roue et d’écrire une version basique.
Vous pouvez simplement utiliser la commande openssl
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 modifie vos données et le hachage.
Cette commande provient du paquet 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
(telles que celles fournies avec RHEL4) peuvent ne pas fournir l’option -hmac
.
Comme solution alternative, mais principalement pour prouver que les résultats sont les mêmes, nous pouvons aussi appeler PHP hmac_sha1()
depuis la ligne de commande:
[me@home]$ echo '= hash_hmac("sha1", "value", "key") ?>' | php 57443a4c052350a44638835d64fd66822f813319
Voici une fonction bash qui fonctionne comme hash_hmac
de 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"
Merci pour la fonction hash_hmac! Mais ce n’était pas suffisant pour mon application. Au cas où quelqu’un se poserait la question, je devais répéter plusieurs fois l’utilisation d’une clé résultant du hachage précédent et donc une entrée binary. (La signature d’authentification Amazon AWS est créée comme ceci.)
Donc, ce dont j’avais besoin était un moyen de fournir la clé binary 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 exige que la fonction hash_hmac renvoie la valeur au format hexadécimal. Il faut donc faire écho à ce qui suit:
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
Ensuite, le prochain appel devrait fournir la clé en hexadécimal:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
J’espère que cela aidera tout le monde, 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 le fait …)
Pour ceux qui aiment explorer plus de JWT sur la ligne de commande: script cool jwt bash