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

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

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

Связанный контент