Я довольно смущен, почему я вижу разные результаты для хеширования md5 в PHP и OpenSSL.
Вот код, который я запускаю:
php -r "echo md5('abc');"
Результаты в: 900150983cd24fb0d6963f7d28e17f72
Хотя это:
echo abc | openssl md5
Результаты: 0bee89b07a248e27c83fc3d5951213c1
Зачем?
Существует только один способ вычисления 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