Tuyau rapide : Génération de mots de passe aléatoires depuis le shell
Pour créer un mot de passe héxadecimal aléatoire depuis bash (interpréteur de commande par défaut sous GNU/Linux et autres systèmes de type UNIX) :
echo -n $(date +%N; uptime; uname -a) chaine_secrete_alphanum_a_modifier | sha1sum | head -c 12; echo
L’argument “-c” de head correspond au nombre de caractères hexadécimaux que vous souhaitez obtenir (41 au plus en une seule fois).
Il est préférable de modifier la chaîne secrète à quelque chose de plutôt aléatoire, bien que le programme sha1sum a de fortes chances de fournir quelque chose de solide avec de telles informations en entrée…
Note : il est possible et facile de faire de bien meilleurs générateurs (en script shell ou autre), mais les commandes choisies ont l’avantage de fonctionner sur une grande majorité de distribution GNU/Linux ;)

C’est une bonne idée, mais je lui reproche de générer des mots de passe n’utilisant que le dix chiffres et les six premières lettres de l’alphabet minuscule… ce qui limite grandement les combinaisons.
Un autre idée pour générer un mot de passe plus complexe ?
Une autre possibilité ne nécessitant pas de chaîne secrète (qui resterait en plus dans l’historique) :
dd if=/dev/random bs=1k count=1 2> /dev/null | sha1sum
@Vincent : /dev/urandom plutôt?
Sinon la “chaîne secrète” n’est qu’un peu de décoration en plus, en principe rien que les nanosecondes de la commande date mélangé au reste suffit pour que le résultat de la commande sha1sum soit imprévisible.
@jp.fox : Oui, cette limite est clairement précisée…
Autre méthode au pif quand on manque d’inspiration :
dd if=/dev/urandom bs=16k count=1 | strings | head -c 100 | lessPerso, j’ai beaucoup plus confiance dans la distribution aléatoire fournie par /dev/urandom et /dev/random (ce dernier étant encore mieux, mais on a pas de garantie de résultat dans un temps défini…) que dans la “date”…
Oui… Enfin il y a vraiment une bonne raison de mettre des guillemets à “date”, puisqu’ici seul une quantité exprimée en nanosecondes est gardée (pour la commande “date”, la sortie d’uptime complète l’info).
Pour déterminer la “qualité” de l’aléatoire en sortie de sha1sum, il faut prendre en compte :
* la quantité de données non aisément déterminables passées en entrée
* la quantité de donnée que l’on veut en sortie (si c’est pour récupérer un seul chiffre hexa en sortie, ce n’est pas grave de n’avoir que 3 octets “secrets” de bonne qualité en entrée)
Il faut savoir que la quantité de donnée “connue” passée en entrée de sha1sum, tout comme la proportion entre ce qui est “connu” et ce qui est “secret” n’ont aucune importance.
Ainsi si vous passez ne serait-ce que 32 octets inconnus et le contenu entier d’un livre de shakespare à la fonction sha1sum, c’est plus que bon pour avoir en sortie de sha1sum un niveau d’aléa correct ;)
Après il y a ce dont on ne sait pas vraiment si ça peut être retrouvé ultérieurement ou non. Dans le doute, autant ajouter un maximum de telles données en entrée de sha1sum, en sachant très bien que dans le pire des cas, c’est comme s’il n’y avait rien.
Autre solution : apg
Oui, les solutions de bonne qualité pour générer des mots de passe ne manquent pas, et le but de mon post n’est pas de les présenter…
J’ai volontairement voulu me restreindre à quelque chose qui respecte les trois critères suivants :
* un peu “pédagogique” au sujet du shell (le mot “pédagogique” ayant pour moi une signification différente de celle d’une certaine ministre de la culture avec son projet “HADOPI”)
* ne nécessite aucune installation sur un système GNU/Linux à peu près “habituel”
* et bien sûr n’est pas un service distant