Si ejecuta este comando en su Unix
echo -n "foo" | openssl dgst -sha1
Obtendrá esta salida:
(stdin)= 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
(seguido de una nueva línea).
¿Cómo puedo forzar openssl para que no muestre el (stdin)=
prefijo y evitar la nueva línea final?
Respuestas:
El formato binario sin formato no agrega ninguna salida extraña.
Salida como binario y luego convertir a hexadecimal:
Te daré esto:
Este método debe estar preparado para el futuro en caso de que alguien decida cambiar nuevamente el formato de salida de texto. Estoy seguro de que corregirán el prefijo "SHA1 (stdin) =" para que sea coherente con el de una entrada de archivo.
¡No puedo creer que hayan cambiado esto! Me pregunto cuántos scripts se rompieron.
fuente
-c 256
opción para extenderlo a 256 octetos por línea.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:
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.En los sistemas BSD, incluido OSX, puede usar
sha1
.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.
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.
fuente
Aquí hay otra alternativa:
fuente
Aquí hay una manera de hacerlo usando bash incorporado en lugar de tuberías, awk, sed, tr, cut, etc.
fuente