Osservo questo comportamento in OpenSSL 1.0.0e su Ubuntu 11.10, mentre OpenSSL 0.9.8k e 0.9.8t generano solo l'hash. La riga di comando di OpenSSL non è progettata per essere flessibile, è più un modo semplice per eseguire calcoli crittografici dalla riga di comando.
Se si desidera utilizzare OpenSSL, filtrare l'output:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
Su Linux (con strumenti GNU o BusyBox), è possibile utilizzare sha1sum
, che non richiede l'installazione di OpenSSL e ha un formato di output stabile. Stampa sempre un nome file, quindi rimuovilo.
echo -n "foo" | sha1sum | sed 's/ .*//'
Sui sistemi BSD incluso OSX, è possibile utilizzare sha1
.
echo -n "foo" | sha1 -q
Tutti questi hanno generato il checksum in esadecimale seguito da una nuova riga. Il testo nei sistemi unix è sempre costituito da una sequenza di righe e ogni riga termina con un carattere di nuova riga. Se si memorizza l'output del comando in una variabile di shell, la nuova riga finale viene rimossa.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Se è necessario reindirizzare l'input in un programma che richiede un checksum senza newline finale (il che è davvero raro), rimuovere la newline.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program