Se você executar este comando no seu Unix
echo -n "foo" | openssl dgst -sha1
Você obterá esta saída:
(stdin)= 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
(seguido por uma nova linha).
Como forçar o openssl a não mostrar o (stdin)=
prefixo e evitar a nova linha à direita?
Respostas:
O formato binário bruto não adiciona nenhuma saída estranha.
Saída como binária e depois converta para hex:
Vai lhe dar o seguinte:
Esse método deve ser à prova de futuro caso alguém decida alterar o formato de saída de texto novamente. Eu tenho certeza que eles irão corrigir o prefixo como "SHA1 (stdin) =" para ser consistente com o de uma entrada de arquivo.
Não acredito que eles mudaram isso! Gostaria de saber quantos scripts foram quebrados.
fonte
-c 256
opção para estendê-lo para 256 octetos por linha.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:
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.Nos sistemas BSD, incluindo OSX, você pode usar
sha1
.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.
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.
fonte
Aqui está outra alternativa:
fonte
Aqui está uma maneira de fazer isso usando bash built-ins em vez de pipes, awk, sed, tr, cut, etc:
fonte