Obserwuję to zachowanie w OpenSSL 1.0.0e na Ubuntu 11.10, podczas gdy OpenSSL 0.9.8k i 0.9.8t wyprowadza tylko skrót. Linia poleceń OpenSSL nie została zaprojektowana jako elastyczna, jest to raczej szybki i brudny sposób wykonywania obliczeń kryptograficznych z linii poleceń.
Jeśli chcesz użyć OpenSSL, odfiltruj dane wyjściowe:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
W systemie Linux (z narzędziami GNU lub BusyBox) możesz używać sha1sum
, który nie wymaga instalacji OpenSSL i ma stabilny format wyjściowy. Zawsze drukuje nazwę pliku, więc usuń ją.
echo -n "foo" | sha1sum | sed 's/ .*//'
W systemach BSD, w tym OSX, możesz używać sha1
.
echo -n "foo" | sha1 -q
Wszystkie z nich generują sumę kontrolną w systemie szesnastkowym, po której następuje nowa linia. Tekst w systemach uniksowych zawsze składa się z sekwencji linii, a każda linia kończy się znakiem nowej linii. Jeśli przechowujesz dane wyjściowe polecenia w zmiennej powłoki, ostatnia nowa linia jest usuwana.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Jeśli potrzebujesz wprowadzić dane wejściowe do programu, który wymaga sumy kontrolnej bez końcowej nowej linii (co jest naprawdę rzadkie), usuń nową linię.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program