Observo esse comportamento no OpenSSL 1.0.0e no Ubuntu 11.10, enquanto o OpenSSL 0.9.8k e 0.9.8t produzem apenas o hash. A linha de comando do OpenSSL não é projetada para ser flexível, é mais uma maneira rápida e suja de realizar cálculos criptográficos a partir da linha de comando.
Se você quiser usar o OpenSSL, filtre a saída:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
No Linux (com ferramentas GNU ou BusyBox), você pode usar sha1sum
, o que não faz requer que o OpenSSL seja instalado e tenha um formato de saída estável. Ele sempre imprime um nome de arquivo, então tire isso.
echo -n "foo" | sha1sum | sed 's/ .*//'
Em sistemas BSD, incluindo o OSX, você pode usar sha1
.
echo -n "foo" | sha1 -q
Todos estes produzem a soma de verificação em hexadecimal seguida por uma nova linha. O texto em sistemas unix sempre consiste em uma sequência de linhas e cada linha termina com um caractere de nova linha. Se você armazenar a saída do comando em uma variável shell, a nova linha final será removida.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Se você precisar canalizar a entrada em um programa que requeira uma soma de verificação sem uma nova linha final (o que é realmente raro), remova a nova linha.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program