Вопрос или проблема
Как получить MD5 хэш от строки напрямую из терминала?
Например, я хочу получить хэш от строки abcdefg
. В данный момент команда md5sum принимает только имя файла в качестве входных данных. Я хочу просто ввести следующую строку и все было сделано.
md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f
Как это можно сделать?
Можно также сказать следующее:
~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4 -
Это делает то же самое, что и описано @enzotib, но, возможно, немного проще.
Очень просто, оно принимает stdin, так что
md5sum <<<"my string"
Чтобы избежать завершающего перевода строки, добавленного оболочкой:
printf '%s' "my string" | md5sum
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e
вы можете создать сценарий оболочки.
Например, имя сценария md5.sh:
#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'
разрешение на выполнение:
chmod +x md5.sh
Тогда:
$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e
Если ваша система macOS. Вам нужно изменить этот скрипт:
$ echo -n 123456 | md5 | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e
openssl md5 filename
openssl sha1 filename
Для строки передавайте содержимое с помощью echo
echo -n 123456 | openssl md5
Запуск md5sum без каких-либо аргументов приведет к тому, что она будет читать ввод с терминала. Введите или вставьте все, что вы хотите, а когда закончите, нажмите Enter, а затем Ctrl+d, чтобы завершить ввод.
Быстрая проверка --help
для md5sum
показывает, что команда:
md5sum -
затем предоставляет приглашение для простого ввода. Ввод текста, затем использование Enter и после Ctrl+D для обозначения конца файла, затем заставляет md5sum
выдать MD5 от введенного вами необработанного текста (включая тот самый Enter, это CR, насколько мне известно).
Меньше для ввода и никакого пайпинга! И избежать записи вашего пароля в истории оболочки! Ура!
Если вы не хотите этот завершающий CR (что обычно бывает, если хотите хешировать пароль), не нажимайте Enter перед Ctrl+D, вместо этого введите Ctrl+D дважды.
Существует множество примеров для достижения этого, но некоторые из них не эквивалентны, так как некоторые из них явным или неявным образом включают завершающую новую строку, а некоторые нет.
Я хотел бы четко определить, какие из популярных методов включают новую строку, а какие нет.
Вот некоторые примеры для вычисления md5 хэша БЕЗ завершающей новой строки (ПРАВИЛЬНО):
Использование файла с текстом:
$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6 test.txt
Примечание: -n
в echo
означает: “не выводить завершающую новую строку”.
Использование echo
с -n
внутри строки:
$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6 -
Использование printf
:
$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6 -
Использование только команды md5sum
:
(Введите md5sum
, нажмите Enter, затем введите строку test
и затем нажмите двойное сочетание Ctrl+d)
$ md5sum
test098f6bcd4621d373cade4e832627b4f6 -
Использование команды md5sum -
:
(Введите md5sum -
, нажмите Enter, затем введите строку test
и затем нажмите двойное сочетание Ctrl+d)
$ md5sum -
test098f6bcd4621d373cade4e832627b4f6 -
Вот некоторые примеры для вычисления md5 хэша С завершающей новой строкой (НЕПРАВИЛЬНО):
Использование файла с текстом:
$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249 test_n.txt
Использование echo
БЕЗ -n
внутри строки:
echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249 -
Использование здесь-строк:
$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249 -
Использование только команды md5sum
, но с клавишей Enter после ввода текста:
(Введите md5sum
, нажмите Enter, затем введите строку test
и затем снова нажмите Enter и один раз сочетание Ctrl+d)
$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249 -
Использование команды md5sum -
, но с клавишей Enter после ввода текста:
(Введите md5sum -
, нажмите Enter, затем введите строку test
и затем снова нажмите Enter и один раз сочетание Ctrl+d)
$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249 -
В моем случае наилучшим решением для хеширования простой строки будет:
md5hash=$(echo -n "myhashedstring" | md5sum | head -c 32)
результат будет 2e8f8b94e488a2f442a55951862612aa
В моих сценариях я заметил, что есть 2 вещи, которые вы должны знать об этой проблеме.
- Не имеет значения, делаете ли вы
echo "$myvariable"
илиecho -n "$myvariable"
, но всегда следует использовать двойные кавычки для строк и всегда пользоваться одним и тем же методом. Если не так, то результаты не будут совпадать. -
в выводе вы всегда получаете завершающее пространство и тире, как показано в примере:
$ echo -n Welcome | md5sum 7803ffcaea43bb81a439fde13b29bc35 -
чтобы избавиться от этого и остаться только с кодом 7803ffcaea43bb81a439fde13b29bc35
,
делайте: echo "$myvariable" | md5sum | cut -d" " -f1
.
Ответ или решение
Получение MD5-хэша строки непосредственно в терминале — задача, распространенная среди специалистов по ИТ и администрированию систем. В этой статье мы рассмотрим различные методики реализации данной задачи на примерах, а также обсудим, как правильно применить данную технологию в зависимости от системы и требований.
Теория
MD5 (Message-Digest Algorithm 5) — это криптографический хэш-функционал, который используется для создания дайджеста сообщения фиксированной длины (обычно 32 знака в шестнадцатеричной системе), независимо от длины входящего сообщения. Хотя MD5 считается устаревшим для целей безопасности, он по-прежнему широко используется для проверки целостности данных и хэширования строк в различных программных средах.
Основная сложность при использовании утилиты md5sum
заключается в том, что она, в основном, предназначена для работы с файлами. Однако в Linux и Unix-подобных системах md5sum
может быть легко использован для хэширования строк с помощью стандартного ввода.
Примеры
-
Использование команды
echo
Для хэширования строки без включения перевода строки можете использовать команду:
echo -n "ваша_строка" | md5sum
Здесь флаг
-n
указывает командеecho
не добавлять символ переноса строки в конец, что часто необходимо для точного соответствия желаемому хэшу. -
Использование команды
printf
printf
также может быть использован для получения MD5, причем его поведение предсказуемо:printf "%s" "ваша_строка" | md5sum
printf
не добавляет перевод строки, поэтому не требует дополнительных флагов, какecho
. -
Хэширование через
md5sum -
Хэширование можно осуществить, направив ввод непосредственно в
md5sum
:md5sum -
После этого напишите строку и нажмите
Ctrl+D
, чтобы завершить ввод и получить хэш. Обратите внимание, что если вы не хотите, чтобы символ новой строки был включен в расчет, сразу после ввода строки нажмитеCtrl+D
дважды. -
Скрипт на Bash для автоматизации
Если часто требуется выполнение данного действия, вы можете создать простой скрипт:
#!/bin/bash echo -n "$1" | md5sum | awk '{print $1}'
Этот скрипт, сохраненный в файле, например,
md5.sh
, будет принимать строку в качестве аргумента и возвращать только хэш. -
Использование OpenSSL
В случае необходимости, вы можете также использовать OpenSSL, который доступен в большинстве дистрибутивов:
echo -n "ваша_строка" | openssl md5
Это может быть полезным, так как OpenSSL предоставляет универсальные криптографические функции, которые полезны для комплексного управления безопасностью.
Применение
Основное применение MD5-хэширования строки в терминале — это проверка целостности данных и создание уникальных идентификаторов для строк, что важно при разработке программного обеспечения. При этом важно помнить, что MD5 не является безопасным для криптографических целей и его следует использовать только там, где не критична защита данных.
Из перечисленных методов следует выбирать наиболее подходящий в зависимости от поставленных задач. Например, если вы работаете в системе macOS, используйте метод с openssl
, так как md5sum
может работать иначе. Если же обязательна совместимость с POSIX-системами, средства echo -n
или printf
станут наиболее универсальным решением.
Регулярное использование таких методов требует внимания к таким деталям, как наличие символов новой строки, которые могут изменить итоговый хэш. В производственных средах это внимание к деталям может быть критически важным для успешного выполнения задач по сверке данных.
Используя распознанные хэш-функции и подходящие команды, ИТ-специалисты могут значительно повысить свою эффективность и уверенность в работоспособности своих скриптов и процессов, связанных с управлением и проверкой данных.