J'observe ce comportement sous OpenSSL 1.0.0e sur Ubuntu 11.10, alors que OpenSSL 0.9.8k et 0.9.8t ne produisent que le hachage. La ligne de commande d'OpenSSL n'est pas conçue pour être flexible, c'est plutôt un moyen rapide et sale d'effectuer des calculs cryptographiques à partir de la ligne de commande.
Si vous souhaitez utiliser OpenSSL, filtrez la sortie:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
Sous Linux (avec les outils GNU ou BusyBox), vous pouvez utiliser sha1sum
ce qui ne nécessite pas l'installation d'OpenSSL et a un format de sortie stable. Il imprime toujours un nom de fichier, alors retirez-le.
echo -n "foo" | sha1sum | sed 's/ .*//'
Sur les systèmes BSD, y compris OSX, vous pouvez utiliser sha1
.
echo -n "foo" | sha1 -q
Tous ces éléments génèrent la somme de contrôle en hexadécimal suivi d'une nouvelle ligne. Le texte sous les systèmes Unix consiste toujours en une séquence de lignes, et chaque ligne se termine par un caractère de nouvelle ligne. Si vous stockez la sortie de la commande dans une variable shell, la nouvelle ligne finale est supprimée.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Si vous devez diriger l'entrée dans un programme qui nécessite une somme de contrôle sans retour à la ligne final (ce qui est vraiment rare), supprimez le retour à la ligne.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program