Почему md5 PHP отличается от md5 OpenSSL?
Я совершенно не понимаю, почему я вижу разные результаты для MD5 хеширования в PHP и в OpenSSL.
вот код, который я использую:
php -r "echo md5('abc');"
результаты в: 900150983cd24fb0d6963f7d28e17f72
а это:
echo abc | openssl md5
результаты в: 0bee89b07a248e27c83fc3d5951213c1
почему?
4 ответов
есть только один способ вычислить MD5.
слепая догадка заключается в том, что вторая также включает новую строку внутри хэшируемой строки.
да, проверено. Вот и все.
как все отметили, проблема в том, что echo печатает дополнительную новую строку.
однако, предложенное решение ( или простоecho -n
) - не совсем верно. Согласно стандарту POSIX,"реализации не должны поддерживать какие-либо варианты.
printf %s abc | openssl md5
printf abc | openssl md5
echo
обычно добавляет новый символ строки в конце строки, которую он выводит; по этой причине значения MD5 отличаются.
попробовать echo -n abc | openssl md5
.
Как отмечает jdehaan, если вы скажете echo не выводить новую строку, вы получите ответ, который ожидаете
echo -n "abc" | openssl md5
900150983cd24fb0d6963f7d28e17f72