
Я пытаюсь получить md5-хэш строки. Указанная строка состоит только из заглавных и строчных букв и цифр. Никаких других символов, включая пробелы и переводы строк. Строка вводится с клавиатуры, а не через файл ввода, поэтому BOM или другие флаги отсутствуют.
Если я запускаю локально, md5sum
я получаю следующий вывод:
ubuntu@ubuntu:~$ echo word | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8 -
ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8 -
ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf -
Я знаю разницу между 2-м и 3-м выводами вышеиз-за отсутствия символа новой строки( . (Оказалось, что это не так! Смотрите принятый ответ.)-n
).Эта часть мне ясна.
Однако есть инструменты, которые дают третий результат. Все не-CLI инструменты, похоже, даютодинаковыйрезультат, и вот что меня смущает:
- http://www.miraclesalad.com/webtools/md5.phpговорит, что это
c47d187067c6cf953245f128b5fde62a
. - http://www.md5hashgenerator.com/говорит, что это
c47d187067c6cf953245f128b5fde62a
. - http://www.md5.cz/говорит, что это
c47d187067c6cf953245f128b5fde62a
. - http://www.md5online.org/md5-encrypt.htmlговорит, что это
c47d187067c6cf953245f128b5fde62a
. - http://md5-hash-online.waraxe.us/говорит, что это
c47d187067c6cf953245f128b5fde62a
. - Это приложение для Androidговорит, что это
c47d187067c6cf953245f128b5fde62a
. echo -n "word" | unix2dos | md5sum
дает мнеc47d187067c6cf953245f128b5fde62a
.
Что тут происходит?
решение1
$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf -
$ echo "word -n" | md5sum
3a21ca21563e9535a9012daef61a0bdf -
$ echo "-n" word | md5sum
c47d187067c6cf953245f128b5fde62a -
В частности, обратите внимание, что:
$ echo "word" -n
word -n
Все опции должны располагаться перед аргументами, не являющимися опциями. Это имеет место в большинстве программ, за исключением некоторых утилит GNU, и во всех реализациях echo
( echo
однако является особенным в том, что большинство строк, начинающихся с , -
интерпретируются как аргументы, только несколько опций распознаются как таковые).