Ich beobachte dieses Verhalten unter OpenSSL 1.0.0e unter Ubuntu 11.10, während OpenSSL 0.9.8k und 0.9.8t nur den Hash ausgeben. Die Befehlszeile von OpenSSL ist nicht flexibel, sondern eher eine schnelle und unkomplizierte Methode, um kryptografische Berechnungen über die Befehlszeile durchzuführen.
Wenn Sie OpenSSL verwenden möchten, filtern Sie die Ausgabe:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
Unter Linux (mit GNU-Tools oder BusyBox) können Sie sha1sum
OpenSSL verwenden , das keine Installation erfordert und ein stabiles Ausgabeformat aufweist. Es wird immer ein Dateiname gedruckt, also entfernen Sie diesen.
echo -n "foo" | sha1sum | sed 's/ .*//'
Auf BSD-Systemen einschließlich OSX können Sie verwenden sha1
.
echo -n "foo" | sha1 -q
Alle diese geben die Prüfsumme hexadezimal gefolgt von einer neuen Zeile aus. Text unter Unix-Systemen besteht immer aus einer Folge von Zeilen, und jede Zeile endet mit einem Zeilenumbruch. Wenn Sie die Ausgabe des Befehls in einer Shell-Variablen speichern, wird der letzte Zeilenumbruch entfernt.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Wenn Sie die Eingabe in ein Programm umleiten müssen, für das eine Prüfsumme ohne letzte Newline erforderlich ist (was sehr selten vorkommt), entfernen Sie die Newline.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program