|
|
|
|
Bonjour a tous,
voila, je souhaite créer des mots de passe pour utilisateurs via md5, et j'aimerai utiliser un "salt" aléatoire.
Pour le moment, j'ai un truc bidouillé du style :
mkpasswd --hash=md5 Mot2PasS `uuidgen | awk 'BEGIN{FS="-"} {print $1}'`
Salut,
$ perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
stY7q8Is
$ perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
DzeO5pmC
$ perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
lZAdufLs
lami20j |
Salut!
|
Répondre à lami20j
|
J'essaye de faire un scripts base sur celui ci.
pwgen [length] [-aA0] length la longueur du mot de passe -a utiliser des minuscules -A utiliser des majuscules -0 utiliser des chiffres Mon code est le suivant : #!/bin/bash # http://www.commentcamarche.net/forum/affich 2335882 shell generer une chaine aleatoire syntax="`basename $0` [length] [-aA0]\n length password length" # Read parameters while [ $# -gt 0 ]; do case "$1" in *[0-9]) [ $l ] && (echo -e $syntax; exit 1) l=$1 ;; -[aA0]) ;; *) echo -e $syntax; exit 1 ;; esac shift done # Set default [ $l ] || l=8 [ $M ] || M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" while [ "${n:=1}" -le "$l" ] do pass="$pass${M:$(($RANDOM%${#M})):1}" let n+=1 done echo "$pass" Les problemes sont les suivants : 1) Pourquoi mes doubles espaces sont supprimes dans la variable syntax 2) *[0-9] reconnait les nombres mais aussi 3r5 Quelle syntaxe utiliser pour capter uniquement les combinaisons de chiffres 3) [aA0] reconnait a, A et 0 mais pas aA, A0, etc... Quelle syntaxe utiliser pour capter toutes les combinaisons possibles de a, A et 0 Merci d'avoir presente ce bout de code qui me pernet d'en decouvrir toujours plus sur les scripts Santiago Il y a 10 types de personnes dans le monde Ceux qui comprennent le binaire et les autres. |
Encore un autre probleme.
[ $l ] && (echo -e $syntax; exit 1) En cas d'erreur, la syntaxe est bien affichee mais exit 1 n'est pas respecte. Le programme continue. J'ai remplace par [ $l ] && echo -e $syntax && exit 1 Ca marche mais c'est completement par hasard apres moultes tentatives. Est ce que quelqu'un connait la syntaxe correcte d'un if then sur une seule ligne ? Il y a 10 types de personnes dans le monde Ceux qui comprennent le binaire et les autres. |
Salut,
lami20j@debian:~$ cat generer_passwd.sh
#!/bin/bash
syntax="`basename $0` [length] [-aA0]\n length password length"
case "$1" in
*[0-9])
if let $1 2>/dev/null
then
echo $1
else
echo -e "$syntax"
fi
;;
*)
echo -e "$syntax"; exit 1
;;
esac
lami20j@debian:~$ sh generer_passwd.sh 355
355
lami20j@debian:~$ sh generer_passwd.sh 3
3
lami20j@debian:~$ sh generer_passwd.sh 3r
generer_passwd.sh [length] [-aA0]
length password length
lami20j@debian:~$ sh generer_passwd.sh 3r5
generer_passwd.sh [length] [-aA0]
length password length
lami20j@debian:~$ sh generer_passwd.sh rrr
generer_passwd.sh [length] [-aA0]
length password length
lami20j |
Salut,
|
Voir également pwgen (disponible évidemment sous debian)
|