O valor de hash MD5 é diferente de Bash e PHP [duplicado]

59

Eu tentei gerar a soma MD5 (usando md5sum) de uma string, "hello". Eu tentei métodos diferentes como a ferramenta md5sum no Linux, a função MD5 () do PHP, bem como vários textos on-line para tradutores md5sum.

echo "hello" | md5sum

e

echo "hello" > file && md5sum file

Deu o resultado b1946ac92492d2347c6235b4d2611184 . No entanto, a função md5 () do PHP e quase todos os geradores online deram a saída 5D41402ABC4B2A76B9719D911017C592 .

Qual é o motivo?

    
por Himanshu Shekhar 21.02.2016 / 17:42

2 respostas

77

Por padrão, echo inclui um caractere de nova linha no final da saída. No entanto, o PHP e os sites online que você usou não incluem a nova linha. Para suprimir o caractere de nova linha, use o sinalizador -n :

echo -n "hello" | md5sum

Saída:

5d41402abc4b2a76b9719d911017c592  -

Veja: help echo

ou com printf:

printf "%s" "hello" | md5sum
    
por 21.02.2016 / 17:45
101

@ A resposta de Cyrus é exatamente a questão de como resolver isso - para explicar, ao usar echo , ela gerará uma nova linha no final da string. Como você pode ver nesta saída on-line, hello com uma nova linha gera exatamente o MD5 que você estava obtendo anteriormente. Usar -n suprime a nova linha e fornecerá o resultado esperado.

Editar:

Vocêpodeverissoclaramentesevocêexportarparahexdump,quemostraohexadecimaldosbyteslá.

$echo"str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65 0a              |str_example.|

Veja o 0a ( \n ) no final da string

$ echo -n "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65                 |str_example|

Com -n echo não coloca uma nova linha ( \n ) no final

Agora com uma string vazia

$ echo  "" | hd
00000000  0a                                                |.|

Apenas o caractere New Line

$ echo -n  "" | hd

String vazia, então hexdump não mostra saída

    
por 21.02.2016 / 18:01