Как в Arch Linux создать единый хеш md5 для пароля с помощью командной строки? Конечно, я знаю, что существуют безопасные алгоритмы хеширования паролей, к которым md5 не относится, но это всего лишь часть эксперимента.
решение1
Просто echo
введите md5sum.
Первый результат будет учитывать символ новой строки в конце строки перед генерацией хеша.
$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
В противном случае как@AFHЕсли вы не хотите использовать символ новой строки, сделайте следующее:
$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
решение2
Ни в одном из ответов не упоминается echo -n 'password' | …
, что с помощью вы запишете свой пароль в постоянное хранилище, а именно в вашу историю.
Вы можете избежать этого, в зависимости от оболочки, предваряя команду пробелом (проверьте это для вашей оболочки). Прочитайте документацию вашей оболочки о том, как это обрабатывается.
В качестве альтернативы вы можете использовать md5sum
напрямую, запустив md5sum
, введя пароль и затем Ctrl+D. Не нажимайте Enterмежду паролем и Ctrl+D, если вы не хотите включить новую строку в хэш.
решение3
Вот пример использования 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 содержат еще несколько ответов, а также дополнительные ссылки для более подробного чтения, если вам интересно.