-hmac
toma la clave como argumento(consulte el manual ), por lo que su comando solicita un HMAC usando la clave -hex
. hexkey:...
se toma como un nombre de archivo, ya que no comienza con un guión, y openssl
no toma opciones después de los nombres de archivo, por lo que el siguiente -out
también es un nombre de archivo.
Para obtener el HMAC con una clave dada como una cadena hexadecimal, deberá usar -mac hmac
y -macopt hexkey:
. Tenga en cuenta que al usar -hmac
y -mac hmac
juntos no funciona, y -macopt
requiere -mac hmac
.
Prueba:
openssl dgst -sha256 -hmac abc <<< "message"
openssl dgst -sha256 -hmac abc -macopt hexkey:12345678 <<< "message"
openssl dgst -sha256 -mac hmac -macopt hexkey:616263 <<< "message"
perl -MDigest::HMAC=hmac_hex -MDigest::SHA=sha256 \
-le 'print(hmac_hex("message\n", "abc", \&sha256))'
Todos dan el hash 99592e56fcde028fb41882668b0cbfa0119116f9cf111d285f5cedb000cfc45a
que concuerda con una calculadora HMAC aleatoria en línea para el mensaje message\n
, clave abc
o 616263
en hexadecimal. (Tenga en cuenta la nueva línea al final de message
aquí.)
Entonces, parece que probablemente querrás
openssl dgst -sha256 -mac hmac -macopt hexkey:$(cat mykey.txt) -out hmac.txt /bin/ps
Ya que estamos hablando de criptografía, que es difícil; y OpenSSL, que no siempre tiene las interfaces -a -más fáciles de usar, sugeriría verificar todo usted mismo, al menos dos veces, en lugar de confiar en mi palabra.
Asumiendo que esto está realmente en un script de shell y no en algo como un Makefile...
No hay absolutamente ninguna diferencia en el shell entre $variable
y ${variable}
. Son intercambiables.
Se puede usar ${variable}
si se va a expandir como parte de una cadena y el carácter inmediatamente siguiente es un carácter que es válido como parte de un nombre de variable, por ejemplo, como en "${variable}A"
.
Así que usar ${variable}
no explica la diferencia que ves.
Lo único cierto es que JAVA_OPTS
parece tener un valor diferente en la segunda invocación.