Как создать хэш md5 через командную строку Arch Linux?

3940
Paradox

В Arch Linux, как я могу создать один хэш md5 для пароля с помощью командной строки? Конечно, я знаю, что существуют безопасные алгоритмы хеширования паролей, которых нет у md5, но это только часть эксперимента.

7
Вы можете удалить слово «больше» перед «безопасным». Например, есть защищенные хэши (или, по крайней мере, хэши с некоторой степенью безопасности), MD5 не является одним из них. Todd Wilcox 7 лет назад 4
Just for the record, even a secure cryptographic hash like SHA-256 doesn't directly make a good *password* hash. I know you at least need something like a [salt to defeat rainbow-table attacks](https://en.wikipedia.org/wiki/Salt_(cryptography)), and I'm sure there are other issues that I'm not aware of. Peter Cordes 7 лет назад 2

6 ответов на вопрос

18
Unfundednut

Просто echoэто к md5sum.

Первый результат будет рассматривать символ новой строки в конце строки перед генерацией хеша.

$ echo P@ssword1 | md5sum 0a43c426e3d6764fe1f3f7cbb3579eba - 

В противном случае, если @AFH заявляет, что если вы не хотите использовать символ новой строки, сделайте следующее:

$ echo -n 'P@ssword1' | md5sum d106b29303767527fc11214f1b325fb6 - 
Это включает в себя символ новой строки вместе с паролем: это может быть тем, что хочет спрашивающий, но если нет, вам нужно `echo -n 'P @ ssword1' | md5sum`. Я включил в пароль кавычки на случай, если он содержит символы, которые интерпретирует оболочка; Я использовал одинарные кавычки, чтобы запретить расширение, если есть `$`. AFH 7 лет назад 9
This will return the wrong result, because you're not hashing `P@ssword1`, but `P@ssword1`. Use `echo -n P@ssword1 | md5sum` instead. phihag 7 лет назад 7
@AFH Я расширил ответ от вашего комментария. Unfundednut 7 лет назад 0
_ «Первый результат вернет символ новой строки с хешем.» _ Нет, он будет учитывать символ новой строки при генерации хеша, что совсем другое дело! Lightness Races in Orbit 7 лет назад 5
Моя работа была выключена. Правильный. Unfundednut 7 лет назад 0
BTW, I just tested a "here-string" as an alternative to echo. `md5sum <<< 'P@ssword1'` gives the first hash (0a43...): here-strings include the trailing newline. Peter Cordes 7 лет назад 0
Я думаю, что вы должны удалить один без -n, потому что это может сбить с толку некоторых людей Chris Koston 7 лет назад 0
11
Jonas Schäfer

Ни в одном из ответов не упоминается, что с помощью echo -n 'password' | …этого вы будете записывать свой пароль в постоянное хранилище, а именно свою историю.

В зависимости от оболочки вы можете избежать этого, поставив перед командой префикс с пробелом (проверьте это для вашей оболочки). Прочтите в своей оболочке документацию о том, как это делается.

Кроме того, вы можете использовать md5sumнапрямую, запустив md5sum, введя пароль, а затем Ctrl+D. Не нажимайте Enterмежду паролем и Ctrl+D, если вы не хотите включить новую строку в хеш.

Вы начали так хорошо (+1) ... но после того, как вы сказали, что записать пароль самолета в файл тоже работает (-1) `8-O` (сколько дыр в безопасности он открывает ...). Кстати, если переменная `$ HISTCONTROL` установлена ​​в _ignorespace_ или в _ignoreboth_, все команды, введенные с пробелом, не будут сохранены в истории ... Тем не менее, всегда полезно проверить это напрямую. (+1 снова :-)) ... Hastur 7 лет назад 1
@Hastur Хороший вопрос. Запись в файл, как правило, лучше, чем использование пароля в истории, потому что вы можете просто отсоединить файл (который может не работать с историей, в зависимости от конфигурации - я видел оболочки, которые (пере) записывают историю при выходе ). Однако вы правы в том, что правильно записать пароль в файл не так просто, как просто запустить vim или что-то в этом роде (по крайней мере, нужно установить umask, и я не знаю точно, оставит ли это какие-либо дыры). Я убрал часть из ответа. Jonas Schäfer 7 лет назад 0
Я замечаю твою правку (но я просто _upvoted_, я не могу дважды, но я могу думать о чем-то еще ...). Hastur 7 лет назад 0
8
OPSXCQ

Вот пример использования openssl

echo -n 'stack overflow' | openssl md5 (stdin)= 481b8423202598ecfb233c5fa68caf68 

Openssl реализует несколько разных алгоритмов хеширования, если вам когда-нибудь понадобится другой.

4
a CVn

Кажется, что все предлагают использовать echo- по крайней мере, большую часть времени, к счастью, с -n, что облегчает одну из его проблем (то, что он печатает новую строку в конце).

Но echoэто не обязательно соответствует. Он имеет ряд поведенческих особенностей, которые необходимо учитывать, и может быть несовместим между системами. Лучше использовать printfвместо этого .

Следовательно, вы должны использовать

$ printf '%s' 'P@ssword1' | md5sum d106b29303767527fc11214f1b325fb6 - $ 

С помощью printf, если вы хотите новую строку в конце, вы должны явно добавить ее самостоятельно:

$ printf '%s\n' 'P@ssword1' | md5sum 0a43c426e3d6764fe1f3f7cbb3579eba - $ echo 'P@ssword1' | md5sum 0a43c426e3d6764fe1f3f7cbb3579eba - $ 

вместо того, чтобы просить не получать его (и надеяться, echoчто в системе работает то же самое, это происходит на более позднем этапе):

$ echo -n 'P@ssword1' | md5sum d106b29303767527fc11214f1b325fb6 - $ 

Чтобы подробнее остановиться на причудах, оecho которых я упоминал выше, вот несколько:

  • Он работает по-разному в разных системах. Многие современные системы поддерживают -nуказание echoне завершать вывод новой строкой, но некоторые могут этого не делать. А что, если вы действительно хотите распечатать -n? Некоторые реализации могут фактически отличаться в зависимости от настроек в оболочке или среде.
  • Он обрабатывает или может не обрабатывать некоторые последовательности символов (особенно символы с обратной косой чертой) особым образом. Это не совсем необоснованно иметь такие в паролях, и POSIX не гарантирует ничего о поведении echo (его поведение определенно не определено ), если первый аргумент -nили любой из его аргументов содержит обратную косую черту.

Ответы на вышеупомянутый вопрос об использовании printf вместо echo содержат еще несколько ссылок, а также дополнительные ссылки для дополнительного чтения, если вам интересно.

"It (echo) has a number of behavioral quirks that you need to keep in mind" Can you expand on this? DavidPostill 7 лет назад 0
@DavidPostill I added a bit on that. Do you feel that this is better? a CVn 7 лет назад 0
Perfect :) It was for my own education (I didn't want to imply there was anything wrong with your answer). DavidPostill 7 лет назад 0
@DavidPostill No worries; I like to try to make my answers as good as they can reasonably be, even when they aren't the top voted ones! (I didn't expect this to garner significant attention even when I started writing it, but felt it was worth having an answer discussing how printf is probably a better choice than echo particularly for something like this.) a CVn 7 лет назад 0
That goes for me too :) DavidPostill 7 лет назад 0
3
Wumpus Q. Wumbley

Вопрос подсказывает мне кое-что еще, поэтому для полноты:

Существует основанный на MD5 метод хеширования соленых паролей, который заменил оригинальный crypt () на основе DES для использования в /etc/shadow. Теперь его заменили более новыми вещами, но если вы когда-нибудь столкнетесь с «хешированием пароля MD5» в дикой природе, это может относиться к этому, а не к простому MD5.

Эти основанные на MD5 хэши помечены префиксом, $1$и вы можете рассчитать их с помощьюopenssl passwd -1

0
Aaron Franke

Вы можете легко сделать это, используя echoи md5sum:

 echo -n "password" | md5sum 
Без `-n`` echo` добавит символ новой строки к выводу, поэтому хеш будет неверным. Например, для `echo -n lolwut | md5sum` результат `05a208028929fd77cfb5b08096a837df`, а для` echo lolwut | md5sum` это `f291ceceddd9e13a0ab68cf1829ef583`. Ivan Kolmychek 7 лет назад 2