Значение хеша MD5 отличается от Bash и PHP

Я попытался сгенерировать сумму MD5 (используя md5sum) для строки "hello". Я опробовал различные методы в качестве инструмента md5sum в Linux, функцию PHP MD5(), а также различные онлайн-переводчики текста в md5sum.

echo "hello" | md5sum

а также

echo "hello" > file && md5sum file

Дал результат b1946ac92492d2347c6235b4d2611184, Тем не менее, функция PHP md5() и почти все онлайн-генераторы дали вывод 5D41402ABC4B2A76B9719D911017C592,

Какова причина?

2 ответа

Решение

По умолчанию, echo включает символ новой строки в конце вывода. Тем не менее, PHP и веб-сайты, которые вы использовали, не включают перевод строки. Чтобы подавить символ новой строки, используйте -n флаг:

echo -n "hello" | md5sum

Выход:

5d41402abc4b2a76b9719d911017c592 -

Увидеть: help echo


или с помощью printf:

printf "%s" "hello" | md5sum

Ответ @ Сайруса точно соответствует тому, как решить эту проблему - объяснить при использовании echo он выведет новую строку в конце строки. Как вы можете видеть на этом онлайн-выходе, hello с новой строкой выводит именно тот MD5, который вы получали ранее. С помощью -n подавляет перевод строки, а затем даст вам ожидаемый результат.

Редактировать:

Вы можете увидеть это ясно, если вы выводите его на hexdump, который показывает шестнадцатеричное число байтов там.

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

Увидеть 0a (\n) в конце строки

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

С -n эхо не ставит новую строку (\n) в конце

Теперь с пустой строкой

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

Просто персонаж Новой Линии

$ echo -n  "" | hd

Пустая строка, так hexdump не показывает вывод

Другие вопросы по тегам