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

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

6 ответов

Решение

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

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

$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba  -

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

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

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

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

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

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

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

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

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

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

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

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

The answers to the above-linked question on using printf instead of echo have several more, as well as further links for more reading if you are curious.

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

 echo -n "password" | md5sum
Другие вопросы по тегам