Comment diriger le hash md5 dans un shell


12

Je cherche un moyen simple de diriger le résultat de md5sumdans une autre commande. Quelque chose comme ça:

$echo -n 'test' | md5sum | ...

Mon problème est qu'il md5sumgénère non seulement le hachage de la chaîne, mais également un hypen, ce qui indique que l'entrée provient de stdin. J'ai vérifié le fichier man et je n'ai trouvé aucun indicateur pour contrôler la sortie.


4
Remarque: veillez à ne pas utiliser echo -nlorsque les données de texte sont inconnues. Utilisez printf '%s' "$DATA"plutôt. Contrairement echo -n "$DATA", cela fonctionnera quand DATA="-n"(entre autres exemples).
Stéphane Gimenez

Réponses:


14

Vous pouvez utiliser la commande cut ; il vous permet de couper une certaine plage de caractères / octets de chaque ligne d'entrée. Étant donné que le hachage MD5 a une longueur fixe (32 caractères), vous pouvez utiliser l'option -c 1-32pour ne conserver que les 32 premiers caractères de la ligne d'entrée:

echo -n test | md5sum | cut -c 1-32

Alternativement, vous pouvez dire cutde diviser la ligne à chaque espace et de ne produire que le premier champ: (notez les guillemets autour du caractère espace)

echo -n test | md5sum | cut -d " " -f 1

Voir la page de manuel de coupe pour plus d'options.


J'y ai pensé aussi! J'ai choisi -d+ -fpour que cela md5sumpuisse être remplacé par sha1sumou autre chose plus tard.
Stéphane Gimenez

awkfonctionne aussi: echo -n test | md5sum | awk -F" " '{print $1}' ouawk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

Merci pour la réponse. @laebshade En fait, vous devez utiliser printf sinon il affichera un nouveau caractère de ligne à la fin;)
nmat

@laebshade: l' -F" "option to awkest très étrange à voir, étant donné que c'est la valeur par défaut pour awk.
enzotib

3

Vous pouvez cut:

echo -n 'test' | md5sum | cut -d' ' -f1

Ici, -d' 'choisit l'espace comme délimiteur et -f1demande le premier champ (avant un délimiteur).


2

Utiliser awk fonctionne aussi très bien:

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

Une autre façon consiste à créer une sous-chaîne. Comme vous savez que le hachage md5 est une chaîne de 32 caractères, vous pouvez utiliser:

HASH=$(echo -n 'test' | md5sum -) && echo ${HASH:0:32}

Ce ne sont que des manipulations de cordes, vous avez donc le choix!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.