=c2=ab hacher =c2=bb une cha=c3=aene dans un script shell
Aucune réponse
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" #@<>'
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pascal J. Bourguignon
Olivier Miakinen <om+ writes:
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 <om+news@miakinen.net> writes:
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" #@<>'
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
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
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.
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
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
Olivier Miakinen , dans le message <q2egl8$1fv6$, 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 : « "%sn" ».
sha256sum|sed -e 's/ *-//')
Note : « cut -c 1-64 » sera un substitut intéressant à sed.
Olivier Miakinen , dans le message <q2egl8$1fv6$1@cabale.usenet-fr.net>,
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 , dans le message <q2egl8$1fv6$, 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 : « "%sn" ».
sha256sum|sed -e 's/ *-//')
Note : « cut -c 1-64 » sera un substitut intéressant à sed.
Olivier Miakinen
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 : « "%sn" ».
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
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.
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 : « "%sn" ».
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
doudou971
Le vendredi 25 Janvier 2019 à 16:24 par Nicolas George :
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 : « "%sn" ».
sha256sum|sed -e 's/ *-//')
Note : « cut -c 1-64 » sera un substitut intéressant à sed.
"Je déconseille les backslashes seuls dans des guillemets doubles :" Très bon déconseil :)
Le vendredi 25 Janvier 2019 à 16:24 par Nicolas George :
> 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.
"Je déconseille les backslashes seuls dans des guillemets doubles :"
Très bon déconseil :)