Как создать хэш 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