В 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 реализует несколько разных алгоритмов хеширования, если вам когда-нибудь понадобится другой.
Кажется, что все предлагают использовать 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 содержат еще несколько ссылок, а также дополнительные ссылки для дополнительного чтения, если вам интересно.
Вопрос подсказывает мне кое-что еще, поэтому для полноты:
Существует основанный на MD5 метод хеширования соленых паролей, который заменил оригинальный основанный на DES crypt() для использования в /etc/shadow
. Теперь его заменили более новыми вещами, но если вы когда-нибудь столкнетесь с "хешированием пароля MD5" в дикой природе, это может относиться к этому, а не к простому MD5.
Эти основанные на MD5 хэши помечены префиксом $1$
и вы можете вычислить их с помощью openssl passwd -1
Вы можете легко сделать это, используя echo
и md5sum
:
echo -n "password" | md5sum