Je veux générer un mot de passe aléatoire, et je le fais comme ceci:
</dev/urandom tr -dc [:print:] | head -c 64
Sur mon ordinateur portable, qui exécute Ubuntu, cela ne produit que des caractères imprimables, comme prévu. Mais quand je ssh sur le serveur de mon école, qui exécute Red Hat Enterprise Linux, et que je l'exécute là-bas, j'obtiens des sorties comme 3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K
, ce qui ne fonctionnera pas du tout. Qu'est-ce qui pourrait mal tourner ici?
:graph:
:print:
</dev/urandom LC_ALL=C tr -dc '[:graph:]' | head -c 64
Considérez plutôt
Cela présente deux avantages:
Vous ne lisez que 48 octets à partir du périphérique aléatoire, pas ~ 8 Ko; si d'autres processus sur le même hôte nécessitent des nombres aléatoires, 8 Ko drainés en même temps peuvent être un problème grave. (Oui, sans doute personne ne devrait utiliser le dispositif aléatoire de blocage , mais les gens le font .)
La sortie de
base64
contient presque aucun caractère avec des significations spéciales. (Pour rien du tout, amure| tr +/ -_
à la fin, et (comme dans l'exemple) assurez - vous que le nombre d'octets d' entrée àbase64
est un multiple de 3.)Un mot de passe généré de cette façon a exactement 384 bits d'entropie, ce qui est un peu moins que ce que vous faisiez (journal 2 96 64 ≈ 421.4), mais plus que suffisant pour la plupart des fins (256 bits d'entropie sont en toute sécurité dans "toujours en devinant quand le Soleil brûle "territoire à l' exception des clés RSA, AFAIK).
la source
D'autres personnes ont déjà souligné que les paramètres régionaux déterminent ce que cela
[:print:]
signifie. Cependant, tous les caractères imprimables ne conviennent pas aux mots de passe (même pas en ascii). Vous ne voulez vraiment pas d'espaces, de tabulations et de # $% ^? dans votre mot de passe - ce n'est pas seulement difficile à retenir, il est également potentiellement dangereux pour le système d'authentification sous-jacent, il peut être impossible d'entrer dans un champ de saisie, etc. Dans ce cas, vous devez simplement sélectionner manuellement les caractères "sains":ou simplement
Ou encore mieux, utilisez
base64
comme suggéré dans d'autres réponses.la source
?
ou^
est tout simplement trop mauvais pour être pris au sérieux.[:print:]
classe locale ne comprend pas d'onglets. C'est seulement[:alnum:]
+[:punct:]
+ espace (espace unique, pas[:space:]
).Qu'en est-il de
les chaînes doivent imprimer la sortie d'urandom dans un format imprimable
la source
-bash: /dev/urandom: Permission denied
Je ne sais pas s'il y a une raison pour laquelle vous utilisez
/dev/random
pour générer le mot de passe, mais je vous recommanderais d'utiliser pwgen afin de soulager votre douleur.Où 10 est la longueur du mot de passe.
http://man.cx/pwgen
la source
Cette méthode à mon humble avis est plus intelligente lorsque vous consommez des données de / dev / urandom La chaîne collée comme $ P $ P $ P ... doit être d'au moins 256 caractères.
la source