Comment obtenir le hachage MD5 d'une chaîne directement dans le terminal?

189

Comment puis-je obtenir le hachage MD5 d'une chaîne directement à partir du terminal?

Par exemple, je veux que la chaîne soit abcdefghachée. Actuellement, la commande md5 n'accepte qu'un nom de fichier en entrée. Je veux simplement entrer la ligne suivante et tout se faire avec.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Comment puis-je y arriver?

Hamed Momeni
la source
2
md5 -s abcdefg
Raitisd

Réponses:

252

Vous pouvez aussi dire quelque chose comme ça:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Il fait fondamentalement la même chose que décrite par @enzotib, mais est peut-être un peu plus simple.

jfmessier
la source
2
Vous souhaitez également mettre à jour l'exemple de résultat, car 7803ffca ... correspond au résultat avec la nouvelle ligne ajoutée. Le résultat correct pour la commande ci-dessus est83218ac34c1834c26781fe4bde918ee4 -
Xanthir
19
pourquoi y a-t-il des espaces et un tiret à la fin?
Keune
1
S'il vous plaît, corrigez-moi si je me trompe, mais je pense que cela est dû au fait que la somme MD5 a été appliquée à un flux de données, par opposition à la lecture d'un contenu de fichier auquel un nom est associé.
Jfmessier
11
Notez que le -nest obligatoire. Sans cela, votre hash sera totalement faux puisqu'il inclut le caractère de nouvelle ligne.
Pithikos
1
Comment pourrais-je ignorer -à la fin. @jfmessier
alper
61

Très simple, il accepte stdin, donc

md5sum <<<"my string"

Pour éviter la nouvelle ligne de fin ajoutée par le shell:

printf '%s' "my string" | md5sum
enzotib
la source
Donner un vote à @messier et @enzotib; les deux tombent dans ma précieuse catégorie "simplicité élégante". Je serais apte à utiliser le <<<"tuyau dans un script; echo stringgagne pour la ligne de commande. Bien joué.
Tom
3
+1 pour utiliser printfcorrectement. Si vous voulez avoir la somme sans le -, mettez | cut -d ' ' -f 1. Exemple d'utilisation:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn le
1
c'est bizarre mais l' <<<opérateur et la printffonction donnent des résultats complètement différents pour le hash md5! le résultat de printf est correct cependant!
Hamed Momeni le
il semble qu'en utilisant l' <<<opérateur envoie une nouvelle ligne au md5sum!
Hamed Momeni le
1
Oui, comme je l'ai dit entre le premier et le deuxième exemple
enzotib le
27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

vous pouvez créer un script shell.

Par exemple, le nom du script est md5.sh:

#!/bin/bash

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

permission execute:

 chmod +x md5.sh

Ensuite:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Si votre système est macOS. Vous devez modifier ce script:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e
ty4z2008
la source
1
C'est trop long.
Gucho Ca
1
alternative à awk:cut -d ' ' -f 1
phil294
J'ai créé une fonction md5() { echo -n $1 | md5sum | awk '{print $1}'; }dans .bashrc et je peux ensuite l'utiliser $ md5 testen ligne de commande. merci pour la réponse
Ruben Benjamin
awkCommande plus courte :'$0=$1'
Alex Stragies
@AlexStragies yep
ty4z2008
10

L'exécution de md5sum sans aucun argument entraînera la lecture des entrées du terminal. Tapez ou collez ce que vous voulez, et lorsque vous avez terminé, appuyez sur ctrl-dpour mettre fin à la saisie.

psusi
la source
1
oui, vous avez raison aussi. mais il ctrl+dfaut appuyer deux fois pour que cela fonctionne.
Hamed Momeni
@ James, si cela ne suit pas une nouvelle ligne, oui. Si vous frappez après avoir frappé entrer, il suffit d'une fois. Lorsqu'il ne suit pas de nouvelle ligne, il oblige simplement tous les caractères saisis jusqu'à maintenant à être traités immédiatement au lieu d'attendre une nouvelle ligne.
Psusi
10
openssl md5 filename
openssl sha1 filename

Pour la chaîne, faites passer le contenu à l'aide d'écho

echo -n 123456 | openssl md5
client
la source
4

Mon rapide coup d'œil sur le --helpfor md5summontre que la commande:

md5sum -

donnera alors une invite pour une entrée simple. Entrer du texte puis utiliser Enteret puis Ctrl+ Dpour indiquer la fin du fichier provoque md5sumle crachage du MD5 du texte brut que vous avez entré (y compris Enterun CR, un IIRC).

Moins de dactylographie et pas de tuyauterie! Et en évitant que votre mot de passe en texte brut soit enregistré dans l'historique du shell! Courtiser!

Si vous ne souhaitez pas que ce CR de fin (ce qui est généralement le cas si vous souhaitez hacher un mot de passe), ne frappez pas Enteravant Ctrl+ D, entrez Ctrl+ Ddeux fois à la place.

Volonté
la source
2

Dans mes scripts, j'ai constaté qu'il y a 2 choses que vous devriez savoir sur ce problème.

  • Peu importe que vous le fassiez echo "$myvariable"ou non, echo -n "$myvariable" mais vous devriez toujours utiliser les doublesQoutes pour les chaînes et toujours utiliser la même méthode. sinon les choses ne vont pas correspondre.
  • dans la sortie, vous obtenez toujours un espace de fin et un tiret, comme indiqué dans l'exemple:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

pour vous en débarrasser et ne rester qu'avec le code 7803ffcaea43bb81a439fde13b29bc35, faites:echo "$myvariable" | md5sum | cut -d" " -f1

Bodo Hugo Barwich
la source
N'oubliez pas le -nparamètre ici pour éviter de sortir le retour à la ligne final, ce qui conduirait à un mauvais md5:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk
1

Il existe de nombreux exemples pour ce faire, mais certains d'entre eux ne sont pas équivalents car certains incluent explicitement ou implicitement le retour à la ligne, d'autres pas.

Je voudrais préciser clairement laquelle des méthodes populaires inclut la nouvelle ligne et celles qui ne le sont pas.

Voici quelques exemples pour calculer le hachage md5 SANS le retour à la ligne (CORRECT):

Utiliser un fichier avec du texte:

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

Note: -n in echosignifie: "ne pas sortir la nouvelle ligne".

Utilisation echoavec -ninline:

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

Utilisant printf:

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

En utilisant seulement la md5sumcommande:

(Écrivons md5sum, appuyez sur Enterpuis écrivez chaîne test, puis appuyez sur la combinaison double Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Utilisation de la md5sum -commande:

(Écrivons md5sum -, appuyez sur Enterpuis écrivez chaîne test, puis appuyez sur la combinaison double Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Voici quelques exemples pour calculer le hachage md5 avec une nouvelle ligne (SO NOT CORRECT):

Utiliser un fichier avec du texte:

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

Utilisation de echoSANS en -nligne:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

En utilisant ici les chaînes :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

En utilisant seulement la md5sumcommande mais avec la Enterclé après avoir écrit le texte:

( Écrivons md5sum, appuyez sur Enterpuis écrivez chaîne test, puis appuyez sur agaien Enteret une fois combinaison Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

En utilisant la md5sum -commande mais avec la Enterclé après avoir écrit le texte:

( Écrivons md5sum -, appuyez sur Enterpuis écrivez chaîne test, puis appuyez sur agaien Enteret une fois combinaison Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
Simhumileco
la source