Почему мой хэш командной строки отличается от онлайн-результатов MD5?
На Mac OS X v10.5 (Leopard) PowerPC, если я это сделаю:
эхо "привет" | md5в командной строке результат:
b1946ac92492d2347c6235b4d2611184
Но если я войду в привет на одном из хеш-сайтов MD5, таких как http://md5online.net/, я получу:
5d41402abc4b2a76b9719d911017c592
Я делаю что-то неправильно? Если я хочу использовать MD5 на ходу, как я могу убедиться, что то, что я получаю в командной строке, будет соответствовать онлайн-инструментам md5?
5 ответов
Когда вы выводите эхо из командной строки, md5 вычисляет сумму из 6 символов - h,e,l,l,o плюс символ новой строки. Текст, который вы вводите на веб-сайте, не имеет новой строки.
Попробуй сделать
echo -n hello | md5
и это даст вам то, что вы ожидаете. -N говорит эхо не выводить символ новой строки.
Вы также можете использовать printf вместо echo, что автоматически подавляет символ новой строки:
printf hello | md5
Или даже:
printf "hello" | md5
b1946ac92492d2347c6235b4d2611184 это md5 только строки
hello
5d41402abc4b2a76b9719d911017c592 является md5 из
hello
CR + LF
CR + LF - это новая строка Windows.
Чтобы добавить мои 5 центов и расширить ответ: в Linux это не md5, а md5sum, поэтому вы должны сделать следующее:
echo -n hello | md5sum
Зависит от того, как вы вызываете (OSx), bash и zsh по умолчанию добавляют символ новой строки.
echo "123" | md5
ba1f2511fc30423bdbb183fe33f3dd0f
echo "123" | tr -d "\n" | md5
202cb962ac59075b964b07152d234b70
echo -n "123" | md5
202cb962ac59075b964b07152d234b70
printf "123" | md5
202cb962ac59075b964b07152d234b70