=c2=ab hacher =c2=bb une cha=c3=aene dans un script shell

Le
Olivier Miakinen
Bonjour,

Dans un script shell (vraisemblablement bash), je vais avoir le
besoin suivant.

À partir d'une chaîne de caractères à peu près quelconques (choisis
quand même dans les caractères ASCII imprimables, donc de code ASCII
compris entre 32 et 126), et de longueur quelconque, je voudrais
obtenir une chaîne de longueur fixe ne comportant que des chiffres
ou des lettres.

Je n'ai aucun besoin d'une sécurité forte, donc un hachage de type
sha1sum ou md5sum me conviendrait parfaitement (mais il peut exister
quelque chose de plus simple auquel je n'aurais pas pensé, ne pas
hésiter à me faire d'autres propositions).

la chaîne de caractères de départ est dans une variable (mettons
par exemple $input) et je voudrais obtenir le résultat dans une
autre variable (par exemple $output).

Pour le moment, le code le moins complexe que j'ai trouvé est le
suivant :
##########################################
input='This is an "example" #@<>'

tmp=$(md5sum << blablabla
$input
blablabla
)

output=$(sed 's/ *-//' << blablabla
$tmp
blablabla
)

echo $output
##########################################

qui donne comme résultat :
e3fd21b3c4ac587892b8cd0693507adc

Est-ce que je pourrais faire mieux ou plus simple ?

Cordialement,
--
Olivier Miakinen
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal J. Bourguignon
Le #26506946
Olivier Miakinen
Bonjour,
Dans un script shell (vraisemblablement bash), je vais avoir le
besoin suivant.
À partir d'une chaîne de caractères à peu près quelconques (choisis
quand même dans les caractères ASCII imprimables, donc de code ASCII
compris entre 32 et 126), et de longueur quelconque, je voudrais
obtenir une chaîne de longueur fixe ne comportant que des chiffres
ou des lettres.
Je n'ai aucun besoin d'une sécurité forte, donc un hachage de type
sha1sum ou md5sum me conviendrait parfaitement (mais il peut exister
quelque chose de plus simple auquel je n'aurais pas pensé, ne pas
hésiter à me faire d'autres propositions).
la chaîne de caractères de départ est dans une variable (mettons
par exemple $input) et je voudrais obtenir le résultat dans une
autre variable (par exemple $output).
Pour le moment, le code le moins complexe que j'ai trouvé est le
suivant :
##########################################
input='This is an "example" #@<>'
tmp=$(md5sum << blablabla
$input
blablabla
)
output=$(sed 's/ *-//' << blablabla
$tmp
blablabla
)
echo $output
##########################################
... qui donne comme résultat :
e3fd21b3c4ac587892b8cd0693507adc
Est-ce que je pourrais faire mieux ou plus simple ?

Simplement, utilise une des commandes sha*sum au lieu de md5sum.
for input in "Hello world" "Hello World" ; do
sum=$(echo -n "$input"|sha256sum|sed -e 's/ *-//')
printf "%s %sn" "$sum" "$input"
done
--
__Pascal J. Bourguignon__
http://www.informatimago.com
Olivier Miakinen
Le #26506947
Bonjour Pascal,
Quelle rapidité ! Je ne m'attendais pas à avoir une réponse si vite !
Le 25/01/2019 01:24, Pascal J. Bourguignon a écrit :
Simplement, utilise une des commandes sha*sum au lieu de md5sum.

Ça, peu importe. Comme je le disais, il n'y a aucun enjeu de sécurité.
Cela dit, ok, je veux bien utiliser sha256sum. Mais surtout :
for input in "Hello world" "Hello World" ; do
sum=$(echo -n "$input"|sha256sum|sed -e 's/ *-//')

Mais oui, bien sûr ! Pourquoi j'allais m'embêter avec des « << » ?
Un grand merci pour cette syntaxe beaucoup plus simple.
printf "%s %sn" "$sum" "$input"
done

Eh bien voilà, problème résolu. Merci !
--
Olivier Miakinen
Nicolas George
Le #26506962
Olivier Miakinen , dans le message a écrit :
sum=$(echo -n "$input"|sha256sum|sed -e 's/ *-//')

Mais oui, bien sûr ! Pourquoi j'allais m'embêter avec des « << » ?

Pour éviter une commande supplémentaire. Attention, echo est peu
standardisé, préférer printf.
Olivier Miakinen
Le #26506967
Le 25/01/2019 08:34, Nicolas George a écrit :
sum=$(echo -n "$input"|sha256sum|sed -e 's/ *-//')

Mais oui, bien sûr ! Pourquoi j'allais m'embêter avec des « << » ?

Pour éviter une commande supplémentaire.

Certes, mais au prix de la longueur du code et d'une moindre lisibilité.
Attention, echo est peu standardisé, préférer printf.

En effet, il faut vraiment que je m'y habitue.
Donc :
sum=$(printf "%s" "$input"|sha256sum|sed -e 's/ *-//')
Ou, puisque ça ne fait pas de différence à partir du moment où je fais
partout pareil :
sum=$(printf "%sn" "$input"|sha256sum|sed -e 's/ *-//')
--
Olivier Miakinen
Nicolas George
Le #26507012
Olivier Miakinen , dans le message a écrit :
Ou, puisque ça ne fait pas de différence à partir du moment où je fais
partout pareil :

Un petit peu quand même dans la mesure où SHA-256 est standardisé,
savoir exactement sur quoi on le calcule est intéressant.
sum=$(printf "%sn" "$input"|

Je déconseille les backslashes seuls dans des guillemets doubles :
« "%s\n" ».
sha256sum|sed -e 's/ *-//')

Note : « cut -c 1-64 » sera un substitut intéressant à sed.
Olivier Miakinen
Le #26507035
Le 25/01/2019 16:24, Nicolas George a écrit :
Ou, puisque ça ne fait pas de différence à partir du moment où je fais
partout pareil :

Un petit peu quand même dans la mesure où SHA-256 est standardisé,
savoir exactement sur quoi on le calcule est intéressant.

Je n'ai pas encore expliqué à quoi ce script devait servir, mais je
t'assure qu'on s'en fout : il suffit que si on lance le script deux
fois dans la même journée, sur la même chaîne, et sur la même machine,
ça retourne la même valeur (et si possible des valeurs différentes
en partant de chaînes différentes).
Si cela t'intéresse de comprendre le contexte, va voir la discussion
« Just a test :) » sur fr.test (oui, je sais, en principe ce n'est
pas un groupe pour discuter, mais là ça se justifie).
sum=$(printf "%sn" "$input"|

Je déconseille les backslashes seuls dans des guillemets doubles :
« "%s\n" ».

Exact. Bon, j'ai mis ceinture et bretelles : des guillemets simples
et plus aucun backslash, à savoir '%s'.
sha256sum|sed -e 's/ *-//')

Note : « cut -c 1-64 » sera un substitut intéressant à sed.

Adopté.
Cordialement,
--
Olivier Miakinen
lindamarcel Hors ligne
Le #26517297
Le vendredi 25 Janvier 2019 à 01:13 par Olivier Miakinen :
Bonjour,

Dans un script shell (vraisemblablement bash), je vais avoir le
besoin suivant.

À partir d'une chaîne de caractères à peu
près quelconques (choisis
quand même dans les caractères ASCII imprimables, donc de code
ASCII
compris entre 32 et 126), et de longueur quelconque, je voudrais
obtenir une chaîne de longueur fixe ne comportant que des chiffres
ou des lettres.

Je n'ai aucun besoin d'une sécurité forte, donc un hachage de
type
sha1sum ou md5sum me conviendrait parfaitement (mais il peut exister
quelque chose de plus simple auquel je n'aurais pas pensé, ne pas
hésiter à me faire d'autres propositions).

la chaîne de caractères de départ est dans une variable
(mettons
par exemple $input) et je voudrais obtenir le résultat dans une
autre variable (par exemple $output).

Pour le moment, le code le moins complexe que j'ai trouvé est le
suivant :
##########################################
input='This is an "example" #@<>'

tmp=$(md5sum << blablabla
$input
blablabla
)

output=$(sed 's/ *-//' << blablabla
$tmp
blablabla
)

echo $output
##########################################

... qui donne comme résultat :
e3fd21b3c4ac587892b8cd0693507adc

Est-ce que je pourrais faire mieux ou plus simple ?

Cordialement,
--
Olivier Miakinen


Excusez moi pour le dérangement mais je viens très humblement vous demander que si quelqu'un connait Mme Amandine Poire de m'aider à la remercier car c'est grâce à son témoignage que j'ai connu Madame Lucie Bourbon une dame humble de cœur qui m'a accordé mon prêt de 23000€ en 72h sans aucune complication. Au début je doutais de sa bonne foi mais je me suis décidée à donner le bénéfice du doute et croyez moi que contrairement à tous ces faux prêteurs cette dame m'a prouvé qu'il existe encore des prêteurs sérieux. N'hésitez pas à la contacter pour tous vos besoins. Son mail:
Madame Amandine Poire si vous voyez ce message sachez que je vous dois tout.
Je vous laisse une fois encore son adresse:
Publicité
Poster une réponse
Anonyme