Come ottenere l'hash MD5 di una stringa direttamente nel terminale?


189

Come posso ottenere l' hash MD5 di una stringa direttamente dal terminale?

Ad esempio, voglio la stringa con abcdefghash. Attualmente il comando md5sum accetta solo un nome file come input. Voglio semplicemente inserire la seguente riga e fare tutto con.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Come posso raggiungerlo?


2
md5 -s abcdefg
raitisd

Risposte:


252

Puoi anche dire qualcosa del genere:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Fondamentalmente fa la stessa cosa descritta da @enzotib, ma è forse un po 'più semplice.


2
Si desidera anche aggiornare il risultato di esempio, poiché 7803ffca ... è il risultato con la nuova riga aggiunta. Il risultato corretto per il comando sopra è83218ac34c1834c26781fe4bde918ee4 -
Xanthir

19
perché ci sono spazi e un trattino alla fine?
keune,

1
Per favore, correggimi se sbaglio, ma penso che ciò sia dovuto al fatto che MD5sum è stato applicato a un flusso di dati, anziché leggere un contenuto di file a cui è associato un nome.
jfmessier,

11
Si noti che -nè obbligatorio. Senza di essa, il tuo hash sarà totalmente sbagliato dal momento che include il personaggio newline.
Pithikos,

1
Come potrei ignorare -alla fine. @jfmessier
Alper

61

Molto semplice, accetta stdin, quindi

md5sum <<<"my string"

Per evitare la nuova riga finale aggiunta dalla shell:

printf '%s' "my string" | md5sum

Dare un voto a @messier e @enzotib; entrambi rientrano nella mia preziosa categoria "elegante semplicità". Sarei pronto a usare la <<<"pipe in uno script; echo stringvince per la linea di comando. Molto bene.
Tom,

3
+1 per l'utilizzo printfcorretto. Se vuoi avere la somma senza il -, inserisci | cut -d ' ' -f 1. Esempio di utilizzo:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn,

1
è strano ma l' <<<operatore e la printffunzione stanno dando risultati completamente diversi per l'hash md5! il risultato di printf è corretto però!
Hamed Momeni,

sembra che l' <<<operatore mandi una nuova riga a md5sum!
Hamed Momeni,

1
Sì, come ho detto tra il primo e il secondo esempio
enzotib

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

puoi creare uno script di shell.

Ad esempio, il nome dello script è md5.sh:

#!/bin/bash

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

autorizzazione eseguita:

 chmod +x md5.sh

Poi:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Se il tuo sistema è macOS. Devi modificare questo script:

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

1
Questo è troppo lungo.
Gucho Ca,

1
alternativa a awk:cut -d ' ' -f 1
phil294

Ho creato una funzione md5() { echo -n $1 | md5sum | awk '{print $1}'; }in .bashrc e quindi posso usare $ md5 testnella riga di comando. grazie per la risposta
Ruben Benjamin,

awkComando più breve :'$0=$1'
Alex Stragies il

@AlexStragies yep
ty4z2008

10

L'esecuzione di md5sum senza argomenti comporterà la lettura dell'input dal terminale. Digita o incolla quello che vuoi, e quando hai finito, premi ctrl-dper terminare l'input.


1
sì, anche tu hai ragione. ma ctrl+ddeve essere premuto due volte perché funzioni.
Hamed Momeni,

@James, se non segue una nuova riga, sì. Se lo colpisci dopo aver premuto Invio, è necessario solo una volta. Quando non segue una nuova riga, impone solo a tutti i caratteri digitati sulla riga di essere elaborati immediatamente invece di attendere una nuova riga.
psusi,

10
openssl md5 filename
openssl sha1 filename

Per string pipe il contenuto utilizza l'eco

echo -n 123456 | openssl md5

4

La mia rapida occhiata a --helpfor md5sumdimostra che il comando:

md5sum -

fornirà quindi una richiesta di input semplice. Inserendo del testo e quindi usando Entere quindi Ctrl+ Dper indicare la fine del file, si ottiene quindi lo md5sumsputo dell'MD5 del testo non elaborato inserito (incluso quello Enter, è un CR, IIRC).

Meno da scrivere e niente tubazioni! Ed evitando che la tua password in chiaro sia registrata nella cronologia della shell! Corteggiare!

Se non vuoi quel CR finale (che di solito è il caso se vuoi hash una password), non premere Enterprima Ctrl+ D, inserisci invece Ctrl+ Ddue volte.


2

Nei miei script ho scoperto che ci sono 2 cose che dovresti sapere su questo problema.

  • Non importa se lo fai echo "$myvariable"o echo -n "$myvariable" ma dovresti sempre usare doubleqoutes per le stringhe e usare sempre lo stesso metodo. in caso contrario le cose non corrisponderanno.
  • nell'output ottieni sempre uno spazio finale e un trattino come mostrato nell'esempio:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

per sbarazzartene e rimanere solo con il codice 7803ffcaea43bb81a439fde13b29bc35, fai:echo "$myvariable" | md5sum | cut -d" " -f1


Non dimenticare il -nparametro qui per evitare di generare la nuova riga finale, il che porterebbe a un md5 sbagliato:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk

1

Ci sono molti esempi per farlo, ma alcuni non sono equivalenti perché alcuni includono esplicitamente o implicitamente la nuova riga, mentre altri no.

Vorrei specificare chiaramente quale dei metodi popolari include la nuova riga e quali no.

Ecco alcuni esempi per calcolare l' hash md5 SENZA newline finale (CORRETTO):

Utilizzando un file con testo:

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

Nota: -n in echosignifica: "non emette la nuova riga finale".

Utilizzando echocon -ninline:

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

Utilizzando printf:

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

Utilizzando solo il md5sumcomando:

(Scriviamo md5sum, premi Enterquindi scrivi stringa teste poi premi doppia combinazione Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Usando il md5sum -comando:

(Scriviamo md5sum -, premi Enterquindi scrivi stringa teste poi premi doppia combinazione Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Ecco alcuni esempi insieme al calcolo dell'hash md5 WITH newline finale (SO NOT CORRECT):

Utilizzando un file con testo:

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

Usando echoSENZA in -nlinea:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Utilizzando qui le stringhe :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Utilizzando solo il md5sumcomando ma con il Entertasto dopo aver scritto il testo:

(Scriviamo md5sum, premi Enterpoi scrivi stringa teste poi premi agaien Entere una volta combinazione Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando il md5sum -comando ma con il Entertasto dopo aver scritto il testo:

(Scriviamo md5sum -, premi Enterpoi scrivi stringa teste poi premi agaien Entere una volta combinazione Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.