Я наблюдаю это поведение под OpenSSL 1.0.0e на Ubuntu 11.10, тогда как OpenSSL 0.9.8k и 0.9.8 т производил просто хеш. Командная строка 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
Можно сделать это и управлять разрешением пользователя. попытайтесь исследовать следующие команды
Спасибо, Ela