Observo este comportamiento en OpenSSL 1.0.0e en Ubuntu 11.10, mientras que OpenSSL 0.9.8k y 0.9.8t generan solo el hash. La línea de comandos de OpenSSL no está diseñada para ser flexible, es más una forma rápida y sucia de realizar cálculos criptográficos desde la línea de comandos.
Si desea utilizar OpenSSL, filtre la salida:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
En Linux (con herramientas GNU o BusyBox), puede usar sha1sum
, que no requiere la instalación de OpenSSL y tiene un formato de salida estable. Siempre imprime un nombre de archivo, así que quítelo.
echo -n "foo" | sha1sum | sed 's/ .*//'
En los sistemas BSD, incluido OSX, puede usar sha1
.
echo -n "foo" | sha1 -q
Todos estos generan la suma de comprobación en hexadecimal seguido de una nueva línea. El texto en sistemas unix siempre consta de una secuencia de líneas, y cada línea termina con un carácter de nueva línea. Si almacena la salida del comando en una variable de shell, la nueva línea final se elimina.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Si necesita canalizar la entrada en un programa que requiere una suma de comprobación sin una nueva línea final (lo cual es realmente raro), elimine la nueva línea.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program