60

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

echo "hello" | md5sum

а также

echo "hello" > file && md5sum file

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

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

2 ответа2

101

Ответ @ Cyrus точно соответствует тому, как решить эту проблему - чтобы объяснить, при использовании 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 echo не ставит новую строку (\n) в конце

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

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

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

$ echo -n  "" | hd

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

79

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

echo -n "hello" | md5sum

Выход:

5d41402abc4b2a76b9719d911017c592  -

Смотрите: help echo


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

printf "%s" "hello" | md5sum

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .