Odpověď @Cyrus je přesně na místě, jak to vyřešit - pro vysvětlení při použití echo na konci řetězce vypíše nový řádek. Jak můžete vidět na tomto online výstupu, hello s novým řádkem vydává přesně ten MD5, který jste dostávali dříve. Pomocí -n potlačí nový řádek a pak vám dá výsledek, který jste očekávali.

Upravit :
Můžete to jasně vidět, pokud to odešlete do hexdump , který ukazuje šestnáctkové číslo bajtů v něm.
$ echo "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 0a |str_example.|
Viz 0a (\n ) na konci řetězce
$ echo -n "str_example" | hd
00000000 73 74 72 5f 65 78 61 6d 70 6c 65 |str_example|
S -n echo nevkládá nový řádek (\n ) nakonec
Nyní s prázdným řetězcem
$ echo "" | hd
00000000 0a |.|
Pouze znak Nový řádek
$ echo -n "" | hd
Prázdný řetězec, tedy hexdump neukazuje žádný výstup
Ve výchozím nastavení echo obsahuje znak nového řádku na konci výstupu. PHP a online stránky, které jste použili, však nový řádek neobsahují. Chcete-li potlačit znak nového řádku, použijte -n příznak:
echo -n "hello" | md5sum
Výstup:
5d41402abc4b2a76b9719d911017c592 -
Viz:help echo
nebo pomocí printf:
printf "%s" "hello" | md5sum