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

189

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

Например, я хочу, чтобы строка abcdefgхэшировалась. В настоящее время команда md5sum принимает только имя файла в качестве ввода. Я хочу просто ввести следующую строку, и все будет сделано с.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Как я могу этого достичь?

Хамед Момени
источник
2
md5 -s abcdefg
raitisd

Ответы:

252

Вы также можете сказать что-то вроде этого:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Он в основном делает то же самое, что описано @enzotib, но, возможно, немного проще.

jfmessier
источник
2
Вы также хотите обновить пример результата, так как 7803ffca ... является результатом с добавленной новой строкой . Правильный результат для команды выше83218ac34c1834c26781fe4bde918ee4 -
Ксантир
19
почему в конце есть пробелы и тире?
Keune
1
Пожалуйста, исправьте меня, если я ошибаюсь, но я думаю, что это потому, что сумма MD5 была применена к потоку данных, а не к чтению содержимого файла, с которым связано имя.
jfmessier
11
Обратите внимание, что -nэто обязательно. Без этого ваш хеш будет полностью неверным, поскольку он включает символ новой строки.
Питикос,
1
Как я мог игнорировать -в конце. @jfmessier
Alper
61

Очень просто, он принимает стандартный ввод, поэтому

md5sum <<<"my string"

Чтобы избежать завершающей строки, добавленной оболочкой:

printf '%s' "my string" | md5sum
enzotib
источник
Предоставление права голоса как @messier, так и @enzotib; оба попадают в мою ценную категорию «элегантная простота». Я был бы склонен использовать <<<"трубу в сценарии; echo stringпобеждает за командную строку. Отлично сработано.
Том
3
+1 за printfправильное использование . Если вы хотите получить сумму без -, поставьте | cut -d ' ' -f 1. Пример использования:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Лекенштейн
1
это странно, но <<<оператор и printfфункция дают совершенно разные результаты для хеша md5! результат printf правильный!
Хамед Момени
кажется, что использование <<<оператора отправляет новую строку в md5sum!
Хамед Момени
1
Да, это так, как я сказал между первым и вторым примером
энзотиб
27
$ 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
ty4z2008
источник
1
Это слишком долго.
Gucho Ca
1
альтернатива awk:cut -d ' ' -f 1
phil294
Я создал функцию md5() { echo -n $1 | md5sum | awk '{print $1}'; }в .bashrc, а затем я могу использовать $ md5 testв командной строке. спасибо за ответ
Рубен Бенджамин
Более короткая awkкоманда:'$0=$1'
Алекс Стрейджес
@AlexStragies yep
ty4z2008
10

Запуск md5sum без аргументов вообще заставит его читать ввод с терминала. Введите или вставьте все, что вы хотите, и когда вы закончите, нажмите, ctrl-dчтобы завершить ввод.

psusi
источник
1
да, ты тоже прав. но ctrl+dнужно нажать дважды, чтобы это работало.
Хамед Момени
@ Джеймс, если он не следует за переводом строки, да. Если вы нажмете его после нажатия Enter, это нужно только один раз. Когда он не следует за новой строкой, он просто заставляет все символы, набранные в строке, обрабатываться немедленно, а не ждать новой строки.
psusi 30.09.11
10
openssl md5 filename
openssl sha1 filename

Для строкового канала содержимое с помощью echo

echo -n 123456 | openssl md5
гость
источник
4

Мое быстрое нажатие на --helpfor md5sumпоказывает, что команда:

md5sum -

затем даст подсказку для простого ввода. Ввод некоторого текста с последующим использованием Enterи затем Ctrl+ Dдля обозначения конца файла приводит md5sumк тому, что вы выплевываете MD5 введенного вами необработанного текста (в том числе Enterэто CR, IIRC).

Меньше набирать и нет труб! И избегать записи вашего открытого текста в истории оболочки! Woo!

Если вы не хотите, чтобы этот конечный CR (который обычно имеет место, если вы хотите хэшировать пароль), не нажимайте Enterперед Ctrl+ D, вместо этого введите Ctrl+ Dдважды.

Будет
источник
2

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

  • Это не имеет значения , если вы делаете echo "$myvariable"или , echo -n "$myvariable" но вы всегда должны использовать doubleqoutes для строк и всегда использовать один и тот же метод. если не вещи не будут совпадать.
  • в выводе вы всегда получаете завершающий пробел и тире, как показано в примере:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

чтобы избавиться от этого и остаться только с кодом 7803ffcaea43bb81a439fde13b29bc35, выполните:echo "$myvariable" | md5sum | cut -d" " -f1

Бодо Хьюго Барвич
источник
Не забудьте этот -nпараметр, чтобы избежать вывода завершающего символа новой строки, который может привести к неверному echo -n $myvariable | md5sum | cut -d" " -f1
значению
1

Есть много примеров, чтобы сделать это, но некоторые из них не эквивалентны, потому что некоторые из них явно или неявно включают перевод строки, а некоторые другие нет.

Я хотел бы четко указать, какие из популярных методов включают перевод строки, а какие нет.

Вот несколько примеров вычисления хеша md5 БЕЗ завершающего перевода строки (ПРАВИЛЬНО):

Используя файл с текстом:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

Примечание: -n в echoзначении: «не выводить завершающий перевод строки».

Использование echoс -ninline:

$ 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БЕЗ -ninline:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Используя здесь строки :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Используя только md5sumкоманду, но с Enterключом после написания текста:

(Давайте напишем md5sum, нажмите, Enterзатем напишите строку, testа затем нажмите agaien Enterи один раз комбинацию Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Используя md5sum -команду, но с Enterключом после написания текста:

(Давайте напишем md5sum -, нажмите, Enterзатем напишите строку, testа затем нажмите agaien Enterи один раз комбинацию Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
simhumileco
источник