Я наблюдаю это поведение под 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
Вот другая альтернатива:
echo -n "foo" | openssl sha1 | awk '{print $2}'
Вот способ сделать это с помощью удара, созданного-ins вместо каналов, awk, sed, TR, сократить, и т.д.:
output="$(openssl sha1 <(printf foo))"; echo ${output/* }
Необработанный двоичный формат не добавляет постороннего вывода.
Вывод как двоичный файл затем преобразовывает в шестнадцатеричное число:
echo -n "foo" | openssl dgst -sha1 -binary | xxd -p
Даст Вам это:
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
Этот метод должен соответствовать требованиям завтрашнего дня в случае, если кто-то решает изменить текстовый выходной формат снова. Я уверен, что они зафиксируют префикс, чтобы быть "SHA1 (stdin) =", чтобы согласовываться с префиксом входа файла.
Я не могу полагать, что они изменили это! Интересно, сколько сценариев было повреждено.
-c 256
опция расширить его до 256 октетов на строку.
– Rockallite
17.01.2017, 11:02