Я спостерігаю таку поведінку під OpenSSL 1.0.0e на Ubuntu 11.10, тоді як OpenSSL 0.9.8k та 0.9.8t виводить лише хеш. Командний рядок OpenSSL не розроблений так, щоб бути гнучким, це скоріше швидкий і брудний спосіб виконання криптографічних обчислень з командного рядка.
Якщо ви хочете використовувати OpenSSL, відфільтруйте вихід:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
У Linux (з інструментами GNU або BusyBox) ви можете використовувати sha1sum
, що не вимагає встановлення OpenSSL і має стабільний вихідний формат. Він завжди друкує ім'я файлу, тому зніміть його.
echo -n "foo" | sha1sum | sed 's/ .*//'
У системах BSD, включаючи OSX, ви можете використовувати sha1
.
echo -n "foo" | sha1 -q
Усі ці дані виводять контрольну суму в шістнадцятковому знаку з наступним рядком. Текст у системах unix завжди складається з послідовності рядків, і кожен рядок закінчується символом нового рядка. Якщо ви зберігаєте вихід команди в змінній оболонки, остаточний новий рядок знімається.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Якщо вам потрібно передати вхід в програму, яка вимагає контрольної суми без остаточного нового рядка (що дійсно рідко), зніміть новий рядок.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program