7

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

6 ответов6

18

Просто echo это на md5sum.

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

$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -

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

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

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

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

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

8

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

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

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

4

Кажется, что все предлагают использовать 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 содержат еще несколько ссылок, а также дополнительные ссылки для дополнительного чтения, если вам интересно.

3

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

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

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

0

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

 echo -n "password" | md5sum

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .