Est-il un script bash pour générer un HMAC-SHA1
de hachage?
Je suis à la recherche de quelque chose d'équivalent pour le code PHP suivant:
hash_hmac("sha1", "value", "key");
Est-il un script bash pour générer un HMAC-SHA1
de hachage?
Je suis à la recherche de quelque chose d'équivalent pour le code PHP suivant:
hash_hmac("sha1", "value", "key");
Je constate que ce n'est pas exactement ce que vous demandez, mais il ne sert à rien de réinventer la roue et de l'écriture d'un bash version.
Vous pouvez simplement utiliser l' openssl
commande pour générer le hachage dans votre script.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Ou tout simplement:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
N'oubliez pas d'utiliser -n
avec echo
, ou encore un caractère de saut de ligne est ajouté à la chaîne et que les modifications apportées à vos données et de la table de hachage.
Cette commande vient du paquet OpenSSL qui devrait déjà être installé (ou facilement installé dans votre choix de Unix/Linux, Cygwin et l'aime.
Notez que les anciennes versions d' openssl
(telles que fournies avec RHEL4) ne peuvent pas prévoir l' -hmac
option.
Comme une solution alternative, mais surtout de prouver que les résultats sont les mêmes, nous pouvons aussi appeler PHP hmac_sha1()
à partir de la ligne de commande:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
Voici un bash fonction 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 le hash_hmac fonction! Mais ce n'était pas assez pour mon application. Dans le cas où quelqu'un s'est demandé, j'ai dû re-hachage des trucs à plusieurs reprises à l'aide d'une clé qui a été le résultat de la précédente hachage, et, par conséquent, est une entrée binaire. (Amazon AWS authentification de signature est créée comme ceci.)
Donc, ce que j'avais besoin d'un moyen de fournir la clé binaire d'une certaine façon qui permettrait de ne pas casser l'algorithme. Ensuite, j'ai trouvé ceci: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
Stephen Henson réponse nécessite la hash_hmac fonction pour renvoyer la valeur au format hexadécimal. Il doit donc faire l'écho de l'suivantes:
$ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //'
Alors le prochain appel devra fournir la clé comme un hexit:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
Espérons que cela aide quelqu'un, probablement quelqu'un qui essaie de créer des scripts bash pour invalider CloudFront entrées sur AWS (comme moi!) (Je n'ai pas encore testé, mais je pense que c'est la chose qui est la cause de pourquoi mon script bash ne fonctionne pas, et mon PHP on n'...)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.