Як отримати хеш MD5 рядка безпосередньо в терміналі?


189

Як отримати MD хеш рядка прямо з терміналу?

Наприклад, я хочу, щоб рядковий abcdefgхеш. В даний час команда md5sum приймає лише ім'я файлу як вхідне. Я хочу просто ввести наступний рядок і все, з чим буде зроблено.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Як я можу цього досягти?


2
md5 -s abcdefg
raitisd

Відповіді:


252

Ви також можете сказати щось подібне:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Це в основному те саме, що описано в @enzotib, але, можливо, трохи простіше.


2
Ви також хочете оновити приклад результату, оскільки 7803ffca ... - це результат із доданим новим рядком. Правильний результат для команди вище83218ac34c1834c26781fe4bde918ee4 -
Ксантір

19
чому в кінці є пробіли та тире?
keune

1
Виправте мене, якщо я помиляюся, але я вважаю, що це тому, що MD5sum застосовано до потоку даних, на відміну від читання вмісту файлу, якому пов’язане ім'я.
jfmessier

11
Зауважте, що -nобов'язкове. Без цього ваш хеш буде абсолютно неправильним, оскільки він включає символ нового рядка.
Пітікос

1
Як я міг проігнорувати -наприкінці. @jfmessier
alper

61

Дуже просто, він приймає stdin, так

md5sum <<<"my string"

Щоб уникнути останнього нового рядка, доданого оболонкою:

printf '%s' "my string" | md5sum

Надання голосів і @messier, і @enzotib; обидва потрапляють у мою цінувану категорію "елегантна простота". Мені б вдало використовувати <<<"трубу в сценарії; echo stringвиграє для командного рядка. Молодці.
Том

3
+1 за printfправильне використання . Якщо ви хочете отримати суму без -, покладіть | cut -d ' ' -f 1. Приклад використання:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn

1
це дивно, але <<<оператор і printfфункція дають зовсім інші результати для md5 хешу! результат printf правдивий, хоча!
Хамед Момені

здається, за допомогою <<<оператора надсилає новий рядок до md5sum!
Хамед Момені

1
Так, як я вже говорив між першим та другим прикладом
enzotib

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

1
Це просто занадто довго.
Гучо Ка

1
альтернатива awk:cut -d ' ' -f 1
Blauhirn

Я створив функцію md5() { echo -n $1 | md5sum | awk '{print $1}'; }в .bashrc, а потім можу використовувати $ md5 testв командному рядку. дякую за відповідь
Рубен Бенджамін

Коротше awkкомандування:'$0=$1'
Alex Stragies

@AlexStragies yep
ty4z2008

10

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


1
так, і ти прав. але ctrl+dйого потрібно натиснути двічі, щоб воно працювало.
Хамед Момені

@James, якщо це не відповідає новому рядку, так. Якщо ви потрапили після натискання клавіші Enter, це потрібно лише один раз. Коли він не слідує за новим рядком, він просто змушує всіх символів, набраних на лінії, поки що обробляти, а не чекати нового рядка.
psusi

10
openssl md5 filename
openssl sha1 filename

Для рядкової передачі вмісту використовуйте ехо

echo -n 123456 | openssl md5

4

Мій швидкий ткік на --helpдля md5sumдемонструє, що команда:

md5sum -

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

Менше набирати та не мати трубопроводів! І уникайте того, щоб ваш пароль простого тексту був записаний в історію оболонки! Ву!

Якщо ви не хочете, щоб контур 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тут параметр, щоб уникнути виведення останнього рядка, що призведе до помилки md5:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk

1

Для цього є багато прикладів, але деякі з них не є рівнозначними, оскільки деякі з них явно чи неявно містять новий рядок, а інші - ні.

Я хотів би чітко вказати, який із популярних методів включає новий рядок, а який ні.

Ось кілька прикладів для обчислення хеша 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а потім натискаємо agaien Enterі один раз комбінацію Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Використовуючи md5sum -команду, але за допомогою Enterклавіші після написання тексту:

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

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.