Почему мой хэш командной строки отличается от онлайн-результатов 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

Другие вопросы по тегам