Значение хеша 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
не показывает вывод