Eu 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 foi projetada para ser flexível, é uma maneira rápida e suja de executar cálculos criptográficos a partir da linha de comando.
Se você deseja 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 requer a instalação do OpenSSL e possui um formato de saída estável. Ele sempre imprime um nome de arquivo, portanto retire-o.
echo -n "foo" | sha1sum | sed 's/ .*//'
Nos sistemas BSD, incluindo OSX, você pode usar sha1
.
echo -n "foo" | sha1 -q
Tudo isso gera 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 de shell, a nova linha final será retirada.
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
Se você precisar canalizar a entrada em um programa que exija uma soma de verificação sem nova linha final (o que é realmente raro), retire a nova linha.
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program