Как получить MD5-хеш строки непосредственно в терминале?

Вопрос или проблема

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

Примеры

  1. Использование команды echo

    Для хэширования строки без включения перевода строки можете использовать команду:

    echo -n "ваша_строка" | md5sum

    Здесь флаг -n указывает команде echo не добавлять символ переноса строки в конец, что часто необходимо для точного соответствия желаемому хэшу.

  2. Использование команды printf

    printf также может быть использован для получения MD5, причем его поведение предсказуемо:

    printf "%s" "ваша_строка" | md5sum

    printf не добавляет перевод строки, поэтому не требует дополнительных флагов, как echo.

  3. Хэширование через md5sum -

    Хэширование можно осуществить, направив ввод непосредственно в md5sum:

    md5sum -

    После этого напишите строку и нажмите Ctrl+D, чтобы завершить ввод и получить хэш. Обратите внимание, что если вы не хотите, чтобы символ новой строки был включен в расчет, сразу после ввода строки нажмите Ctrl+D дважды.

  4. Скрипт на Bash для автоматизации

    Если часто требуется выполнение данного действия, вы можете создать простой скрипт:

    #!/bin/bash
    echo -n "$1" | md5sum | awk '{print $1}'

    Этот скрипт, сохраненный в файле, например, md5.sh, будет принимать строку в качестве аргумента и возвращать только хэш.

  5. Использование OpenSSL

    В случае необходимости, вы можете также использовать OpenSSL, который доступен в большинстве дистрибутивов:

    echo -n "ваша_строка" | openssl md5

    Это может быть полезным, так как OpenSSL предоставляет универсальные криптографические функции, которые полезны для комплексного управления безопасностью.

Применение

Основное применение MD5-хэширования строки в терминале — это проверка целостности данных и создание уникальных идентификаторов для строк, что важно при разработке программного обеспечения. При этом важно помнить, что MD5 не является безопасным для криптографических целей и его следует использовать только там, где не критична защита данных.

Из перечисленных методов следует выбирать наиболее подходящий в зависимости от поставленных задач. Например, если вы работаете в системе macOS, используйте метод с openssl, так как md5sum может работать иначе. Если же обязательна совместимость с POSIX-системами, средства echo -n или printf станут наиболее универсальным решением.

Регулярное использование таких методов требует внимания к таким деталям, как наличие символов новой строки, которые могут изменить итоговый хэш. В производственных средах это внимание к деталям может быть критически важным для успешного выполнения задач по сверке данных.

Используя распознанные хэш-функции и подходящие команды, ИТ-специалисты могут значительно повысить свою эффективность и уверенность в работоспособности своих скриптов и процессов, связанных с управлением и проверкой данных.

Оцените материал
Добавить комментарий

Капча загружается...