¿Existe un script bash para generar un HMAC-SHA1
hash?
Estoy buscando algo equivalente al siguiente código PHP:
hash_hmac("sha1", "value", "key");
Me doy cuenta de que esto no es exactamente lo que estás pidiendo, pero no tiene sentido reinventar la rueda y escribir una versión de bash.
Simplemente puede usar el openssl
comando para generar el hash dentro de su script.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
O simplemente:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Recuerde usar -n
con echo
o, de lo contrario, se agrega un carácter de salto de línea a la cadena y eso cambia sus datos y el hash.
Ese comando proviene del paquete OpenSSL que ya debería estar instalado (o instalado fácilmente) en su elección de Linux / Unix, Cygwin y similares.
Tenga en cuenta que es posible que las versiones anteriores de openssl
(como la que se envía con RHEL4) no ofrezcan la -hmac
opción.
Como solución alternativa, pero principalmente para demostrar que los resultados son los mismos, también podemos llamar a PHP hmac_sha1()
desde la línea de comandos:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
se reemplaza consha256
:-)openssl genrsa
? Además, el enlace de documentación de openssl da como resultado un 404.Aquí hay una función bash que funciona como
hash_hmac
desde PHP:fuente
hash_hmac "sha1" "$(cat your-json-file)" "key"
. Alternativamente, puede canalizar su archivoopenssl dgst
sin usar estahash_hmac
función.¡Gracias por la función hash_hmac! Pero no fue suficiente para mi aplicación. En caso de que alguien se preguntara, tuve que volver a hacer hash varias veces usando una clave que era el resultado del hash anterior y, por lo tanto, es una entrada binaria. (La firma de autenticación de Amazon AWS se crea así).
Entonces, lo que necesitaba era una forma de proporcionar la clave binaria de alguna manera que no rompiera el algoritmo. Luego encontré esto: http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
La respuesta de Stephen Henson requiere que la función hash_hmac devuelva el valor en formato hexadecimal. Por lo que debe hacerse eco de lo siguiente:
Luego, la siguiente llamada debería proporcionar la clave como un hexit:
Espero que esto ayude a cualquiera, probablemente alguien que esté tratando de crear scripts bash para invalidar entradas de CloudFront en AWS (¡como yo!) (No lo he probado todavía, pero creo que esta es la causa de por qué mi script bash no funciona, y mi PHP uno sí ...)
fuente
Para aquellos a los que les gusta explorar más JWT en la línea de comandos: genial script jwt bash
fuente