Jak uzyskać skrót MD5 ciągu bezpośrednio w terminalu?


189

Jak uzyskać skrót MD5 ciągu bezpośrednio z terminala?

Na przykład chcę, aby łańcuch był abcdefgmieszany. Obecnie polecenie md5sum przyjmuje tylko nazwę pliku jako dane wejściowe. Chcę po prostu wprowadzić następujący wiersz i wszystko się skończy.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Jak mogę to osiągnąć?


2
md5 -s abcdefg
raitisd

Odpowiedzi:


252

Możesz także powiedzieć coś takiego:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Zasadniczo robi to samo, co opisał @enzotib, ale może jest nieco prostszy.


2
Chcesz również zaktualizować przykładowy wynik, ponieważ 7803ffca ... jest wynikiem z dodanym nowym wierszem . Prawidłowy wynik dla powyższego polecenia to83218ac34c1834c26781fe4bde918ee4 -
Xanthir

19
dlaczego na końcu są spacje i myślnik?
keune,

1
Popraw mnie, jeśli się mylę, ale myślę, że dzieje się tak, ponieważ MD5sum zostało zastosowane do strumienia danych, a nie do odczytu zawartości pliku, z którą jest związana nazwa.
jfmessier,

11
Zauważ, że -njest to obowiązkowe. Bez niego Twój skrót będzie całkowicie błędny, ponieważ zawiera znak nowej linii.
Pithikos

1
Jak mogłem zignorować -na końcu. @jfmessier
alper

61

Bardzo proste, akceptuje standardowe wejście, więc

md5sum <<<"my string"

Aby uniknąć końcowego znaku nowej linii dodanego przez powłokę:

printf '%s' "my string" | md5sum

Dawanie głosu zarówno @messier, jak i @enzotib; oba należą do mojej cenionej kategorii „elegancka prostota”. Byłbym skłonny użyć <<<"potoku w skrypcie; echo stringwygrywa dla wiersza poleceń. Dobra robota.
Tom

3
+1 za printfprawidłowe użycie . Jeśli chcesz mieć sumę bez -, włóż | cut -d ' ' -f 1. Przykładowe użycie:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn

1
to dziwne, ale <<<operator i printffunkcja dają zupełnie inne wyniki dla skrótu md5! wynik printf jest jednak poprawny!
Hamed Momeni

wygląda na to, że <<<operator wysyła nowy wiersz do md5sum!
Hamed Momeni

1
Tak, tak, jak powiedziałem między pierwszym a drugim przykładem
enzotib

27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

możesz utworzyć skrypt powłoki.

Na przykład nazwa skryptu to md5.sh:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'

uprawnienie wykonać:

 chmod +x md5.sh

Następnie:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Jeśli twój system to macOS. Musisz zmodyfikować ten skrypt:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e

1
To jest po prostu za długie.
Gucho Ca

1
alternatywa dla awk:cut -d ' ' -f 1
Blauhirn

Utworzyłem funkcję md5() { echo -n $1 | md5sum | awk '{print $1}'; }w .bashrc, a następnie mogę jej używać $ md5 testw wierszu poleceń. dzięki za odpowiedź
Ruben Benjamin

Krótsze awkpolecenie:'$0=$1'
Alex Stragies

@AlexStragies tak
ty4z2008

10

Uruchomienie md5sum bez żadnych argumentów spowoduje odczyt danych wejściowych z terminala. Wpisz lub wklej, co chcesz, a kiedy skończysz, naciśnij, ctrl-daby zakończyć wprowadzanie.


1
tak, ty też masz rację. ale ctrl+dtrzeba go nacisnąć dwukrotnie, aby działało.
Hamed Momeni,

@James, jeśli nie jest zgodny z nową linią, tak. Jeśli trafisz go po naciśnięciu klawisza enter, wystarczy go tylko raz. Gdy nie podąża za nową linią, po prostu zmusza wszystkie znaki wpisane do tej pory do natychmiastowego przetworzenia, zamiast czekać na nową linię.
psusi

10
openssl md5 filename
openssl sha1 filename

W przypadku potoku tekstowego treść używa echa

echo -n 123456 | openssl md5

4

Moje szybkie poke na --helpfor md5sumpokazuje, że polecenie:

md5sum -

wyświetli monit o proste wprowadzenie danych. Wpisanie tekstu, a następnie użycie, Entera następnie Ctrl+ w Dcelu oznaczenia końca pliku powoduje md5sumwyplucie MD5 wprowadzonego nieprzetworzonego tekstu (łącznie Enterz CR, IIRC).

Mniej do pisania i bez orurowania! I unikanie zapisywania hasła w postaci zwykłego tekstu w historii powłoki! Zabiegać!

Jeśli nie chcesz tego końcowego CR (co zwykle ma miejsce, jeśli chcesz hashować hasło), nie naciskaj Enterprzed Ctrl+ D, zamiast tego wpisz Ctrl+ Ddwa razy.


2

W moich skryptach stwierdziłem, że na ten temat powinieneś wiedzieć 2 rzeczy.

  • To nie ma znaczenia, jeśli nie echo "$myvariable"albo echo -n "$myvariable" ale zawsze należy użyć doubleqoutes na smyczki i zawsze używać tej samej metody. jeśli nie, rzeczy nie będą pasować.
  • w wyniku otrzymujesz zawsze spację końcową i myślnik, jak pokazano w przykładzie:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

aby się tego pozbyć i pozostać tylko przy kodzie 7803ffcaea43bb81a439fde13b29bc35, wykonaj:echo "$myvariable" | md5sum | cut -d" " -f1


Nie zapomnij -ntutaj parametru, aby uniknąć wypisywania końcowego echo -n $myvariable | md5sum | cut -d" " -f1
znaku

1

Istnieje wiele przykładów, aby to zrobić, ale niektóre z nich nie są równoważne, ponieważ niektóre z nich jawnie lub pośrednio zawierają znak nowej linii, a inne nie.

Chciałbym jasno sprecyzować, które z popularnych metod obejmują nową linię, a które nie.

Oto kilka przykładów obliczania skrótu md5 BEZ końcowego znaku nowej linii (PRAWIDŁOWO):

Używanie pliku z tekstem:

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

Uwaga: -n w echooznacza: „nie wypisuj końcowego znaku nowej linii”.

Używanie echoz -ninline:

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Używanie printf:

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Używając tylko md5sumpolecenia:

(Napiszmy md5sum, naciśnij, Entera następnie napisz ciąg, testa następnie naciśnij podwójną kombinację Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Za pomocą md5sum -polecenia:

(Napiszmy md5sum -, naciśnij, Entera następnie napisz ciąg, testa następnie naciśnij podwójną kombinację Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Oto kilka przykładów obliczania skrótu md5 Z końcowym znakiem nowej linii (TAK NIE POPRAWNY):

Używanie pliku z tekstem:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt

Używanie echoBEZ -nwbudowanego:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Używając tutaj ciągów :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Używając tylko md5sumpolecenia, ale z Enterklawiszem po napisaniu tekstu:

( Napiszmy md5sum, naciśnij, Entera następnie napisz ciąg, testa następnie naciśnij agaien Enteri raz kombinację Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Za pomocą md5sum -polecenia, ale z Enterklawiszem po napisaniu tekstu:

( Napiszmy md5sum -, naciśnij, Entera następnie napisz ciąg, testa następnie naciśnij agaien Enteri raz kombinację Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.