Почему PHP md5 отличается от md5 OpenSSL?

Я довольно смущен, почему я вижу разные результаты для хеширования md5 в PHP и OpenSSL.

Вот код, который я запускаю:

php -r "echo md5('abc');" 

Результаты в: 900150983cd24fb0d6963f7d28e17f72

Хотя это:

 echo abc | openssl md5 

Результаты: 0bee89b07a248e27c83fc3d5951213c1

Зачем?

Related of "Почему PHP md5 отличается от md5 OpenSSL?"

Существует только один способ вычисления MD5.

Слепая догадка заключается в том, что вторая также включает в себя строку новой строки внутри хэшированной строки.

Да, проверил. Вот и все.

Как отмечали все, проблема заключается в том, что эхо выводит дополнительную строку новой строки.

Однако предложенное решение ( echo -n ) не совсем корректно. Согласно стандарту POSIX, « Реализации не должны поддерживать какие-либо варианты». Вы сделаете мир немного лучше, если вы его не используете. использование

 printf %s abc | openssl md5 

или просто

 printf abc | openssl md5 

echo обычно добавляет новый символ линии в конце строки, которую он выводит; это причина, по которой значения MD5 различны.

Попробуйте с echo -n abc | openssl md5 echo -n abc | openssl md5 .

Как отмечает jdehaan, если вы скажете, что echo не выводит новую строку, вы получаете ответ, который вы ожидаете

 echo -n "abc" | openssl md5 900150983cd24fb0d6963f7d28e17f72