Je souhaite générer une chaîne aléatoire (par exemple, mots de passe, noms d'utilisateur, etc.). Il devrait être possible de spécifier la longueur requise (par exemple 13 caractères).
Quels outils puis-je utiliser?
(Pour des raisons de sécurité et de confidentialité, il est préférable que les chaînes soient générées hors ligne, plutôt qu'en ligne sur un site Web.)
apg
personnellement.)apg
pour générer une chaîne aléatoire./dev/urandom
). Ce serait bien d'avoir des réponses en utilisant de vrais générateurs de nombres aléatoires, basés par exemple sur random.org .Réponses:
Ma façon préférée de le faire est d’utiliser
/dev/urandom
avectr
pour supprimer les caractères indésirables. Par exemple, pour obtenir uniquement des chiffres et des lettres:Vous pouvez également inclure plus de caractères de la liste des caractères spéciaux du mot de passe OWASP :
Si vous ne parvenez pas à vous
tr
plaindre de l'entrée, essayez d'ajouterLC_ALL=C
ceci:la source
head /dev/urandom | tr -dc A-Za-z0-9 | head -c10
- Cette façon est plus précise. Vous obtenez 10 caractères en majuscules, en majuscules ou en chiffreshead
commande pourrait être problématique. Il affichera les 10 premières lignes à partir de/dev/urandom
, ce qui signifie qu'il s'arrêtera une fois qu'il aura vu la 10e nouvelle ligne. La longueur de la sortie envoyée à latr
commande est donc aléatoire. Il est possible que la sortie contienne moins de 13 caractèrestr
. Je n'ai pas calculé la probabilité que cela se produise, les calculs sont un peu délicats.<dev/urandom tr -dc "$charset" | head -c "$length"
tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
tr ..
commande, mais simplement citer tout (sauf la citation simple) fonctionne -tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'
.Pour générer un mot de passe aléatoire, vous pouvez utiliser
pwgen
:Générez 7 mots de passe de longueur 13:
Comme mentionné dans les commentaires, vous pouvez éviter de réduire l'entropie en utilisant l'
-s
argument (c.-à-d. Générer des mots de passe plus sûrs, complètement aléatoires mais difficiles à retenir):Pour générer des noms d'utilisateur aléatoires, vous pouvez utiliser
gpw
:Générez 7 mots de passe (noms d'utilisateur) de longueur 13:
la source
pwgen -s
.J'utilise la
openssl
commande, le couteau suisse de cryptographie.ou
la source
rand -hex
limitera la sortie à 16 caractères au lieu des 90+ de mon clavier. base64 est préférable car il comporte 64 caractères, mais ce n'est pas aléatoire (par exemple, il existe des motifs de remplissage prévisibles, et peut-être que certains caractères apparaissent plus souvent que d'autres).openssl rand -base64 12
génère 16 caractères de sortie (car 256 valeurs sont mappées sur 64). Et l'exemple hexagonal produit 24 caractères. Il n'y a pas de perte dans le cas de l'hex car c'est un simple mappage 1: 2, mais il pourrait y en avoir un peu dans le cas en base64 puisque le remplissage est utilisé. La base n’affecte pas l’aléatoire, c’est la façon dont l’on mappe l’un sur l’autre. (et le nombre total de bits est beaucoup plus important).Voici comment je le fais. Il génère une chaîne aléatoire de 10 caractères. Vous pouvez l'optimiser en remplaçant le "fold" par d'autres outils de traitement de chaînes.
la source
/dev/urandom
de bien sûrPour générer un mot de passe avec la meilleure entropie possible avec les outils Linux standard intégrés à chaque distribution que j'utilise:
Tous les caractères imprimables ASCII sont générés - de 32 (espace) à 126 (tilde,
~
). Le mot de passe peut être contrôlé avec lehead
« s-c
drapeau. Il existe également d'autres jeux de caractères possiblestr
(pour ne pas inclure l'espace, mais uniquement les caractères 33-126, à utiliser[:graph:]
).la source
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echo
si vous ne voulez pas` characters in generated string.
`parce que c'est un caractère d'échappement dans de nombreuses langues pose des problèmes< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echo
exclure | \ / `et l'espaceEn fonction du niveau de hasard que vous souhaitez, vous pouvez simplement utiliser la variable intégrée de bash (
zsh
etksh
éventuellement d'autres)$RANDOM
:Les méthodes de lecture directe à partir de
/dev/urandom
sont beaucoup plus simples, mais pour compléter, vous pouvez également utiliser$RANDOM
:Important : cette solution ne produira que des chaînes aléatoires utilisant les 10 premières lettres de l'alphabet. Que cela vous suffise ou non dépend de ce dont vous avez besoin.
la source
$RANDOM
imprimera un nombre compris entre 0 et 32767.rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)
place.Inspiré par Pablo Repetto, je me suis retrouvé avec cette solution facile à retenir :
-z évite les sorties multi-lignes
-e fait écho au résultat
-r permet à n'importe quel caractère d'apparaître plusieurs fois
-n20 chaîne aléatoire d'une longueur de 20 caractères
{A..Z} {a..z} {0..9} classes de caractères autorisées
shuf
fait partie des coreutils linux et est largement disponible ou du moins a été porté.la source
@Brandin a expliqué dans un commentaire à une autre réponse comment obtenir au maximum 100 octets en
/dev/urandom
utilisanthead -c 100
. Une autre façon de faire est avecdd
:À
2>/dev/null
la fin de ladd
commande, vous supprimez la sortie "... records in / ... records out".Je ne connais pas d'avantages / inconvénients substantiels entre ces deux méthodes.
J'ai eu un problème avec les deux méthodes de se
tr
plaindre de l'entrée. Je pensais que c'était parce qu'il n'aimait pas recevoir d'entrée binaire, et par conséquent j'ai suggéré de commencer par filtrer/dev/random
aveciconv -c -t US
. Cependant, Gilles a suggéré un diagnostic et une solution différents, ce qui fonctionne pour moi:la source
iconv
solution utilise au maximum un cœur de processeur et ne génère pas de sortie (j'ai attendu 10libc-bin
2.19. Je ne sais pas si c'est la même icône ...tr
prend en charge l'entrée binaire. Cependant, une plage similaireA-Z
peut être influencée par les paramètres régionaux. EssayezLC_ALL=C tr …
tr
fait car il ne supporte pas du tout le multi-octets (par exemple, la dernière fois que j’ai vérifié que le changement de casse avait été implémenté en définissant simplement le sixième bit de chaque octet). D'autres systèmes (par exemple, BSD) prennent en charge plusieurs octets, ce qui échouera car le risque qu'un flux d'entrée aléatoire soit également un flux valide à plusieurs octets est très faible dans la plupart des encodages. GNU peut ajouter un support multi-octets à tout moment, auquel cas cela échouera. Bien sûr, le réglageLC_ALL=C
va résoudre ce problème.tr
de traiter les entrées binaires (dans les paramètres régionaux C). (Bon, ok, ça dit seulement explicitement que les octets nuls doivent être supportés, cela ne dit pas que les fichiers non vides ne se terminant pas par un caractère de nouvelle ligne doivent être supportés, mais en pratique, c'est toujours le cas également.)APG
est inclus par défaut sur certaines distributions Linux.Pour générer des mots de passe de tailles 5 à 10 dans les sous-ensembles Spécial, Numérique, Capital et Inférieur, la commande est la suivante:
Et revient
Comme l'a dit @landroni dans un commentaire.
la source
apg -a1 -m14
Vous pouvez utiliser l'un des
md5
outils ayant précisément cet objectif. Dans le cas de la création d'un mot de passe complètement aléatoire, vous pouvez utiliser le fichiermd5pass
. C’est un outil très simple à utiliser et très utile, car vous pouvez utiliser du "texte normal" avec un "sel" pour construire rapidement le même mot de passe que vous pourrez récupérer par la suite, ou vous voudrez peut-être obtenir une mot de passe aléatoire tout le temps. L'utilisation générale est:où
password
est un mot choisi qui sera utilisé pour la construction de la chaîne aléatoire etsalt
est le saut en octets à utiliser. Comme ça:Cela créera un mot de passe "une séquence aléatoire" que vous utiliserez. Si vous utilisez no
salt
, vous ne pourrez peut-être pas recréer cette même chaîne par la suite.Cependant si vous utilisez un
salt
comme ceci:alors vous pouvez créer une séquence que vous pourrez récupérer si vous utilisez le mot conjointement avec le même sel (ou saut) s'il avait été défini à l'origine.
la source
salt
est utilisé, cela ressemble à l'approche de PasswordMaker ...Utilisez la
xxd
commande pour spécifier la longueur (via -l) qui fonctionne à la fois sous Linux et OS. https://www.howtoforge.com/linux-xxd-command/la source
Ces deux commandes génèrent des mots de passe aléatoires et des phrases secrètes, respectivement.
Le générateur de mot de passe requiert un nombre file_with_characters contenant tous les caractères que le mot de passe doit utiliser, un caractère par ligne et une fois chacun. Le fichier ne doit pas contenir de lignes vierges et les lignes doivent être terminées par une nouvelle ligne.
Le générateur de phrase secrète nécessite un fichier file_with_words contenant tous les mots que la phrase secrète doit utiliser, un mot par ligne et une fois chacun. Le fichier ne doit pas contenir de lignes vierges et les lignes doivent être terminées par une nouvelle ligne.
L'option --head-count spécifie la longueur du mot de passe - en caractères - ou du mot de passe - en mots.
la source
J'ai trouvé que piping / dev / urandom pour tracer sur macOS ne fonctionnait pas. Voici un autre moyen:
la source
J'utilise:
base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44
Cela me donne 57 caractères possibles. La chaîne peut être copiée -collée (supprimée
+
et\
) ou imprimée et retapée car les caractères difficiles à distinguer (I1lO0
) ont été supprimés.J'aime ça parce que:
Nous remercions https://unix.stackexchange.com/a/230676/9583 et plus particulièrement les commentaires de mon inspiration initiale.
la source
1
sans réduire l' entropie (tout en générant un nouveau pour obtenir un w / plusieurs ne réduire l' entropie). Vous pouvez également ajouter en toute sécurité un!
sans réduire l'entropie. Ni l'un ni l'autre des schémas n'augmente l'entropie, mais pourrait rendre la chaîne générée conforme aux anciennes exigences en matière de mot de passe.La philosophie Unix de "beaucoup de petits outils qui font bien une chose" vous est très utile dans ce cas.
/dev/urandom
est un flux de "octets" aléatoires (qui incluent des caractères non imprimables)base64
encode les données d'octet dans[A-Za-z0-9/+]
(qui est entièrement imprimable)dd
copie les entrées vers les sorties en appliquant les modificateurs donnés en arguments (pouvant inclure la taille et le nombre de blocs)OSX
Linux
Remarques:
tr -d '[A-Z/+]'
se débarrasser des majuscules et+
et/
bs
(taille de bloc) à la longueur dont vous avez besoin.base64
de colonnes est de 76 par défaut et doit être réinitialisé à-w0
moins que vous ne le vouliez.la source
Je souhaite contribuer à ma commande habituelle pour générer un mot de passe
Pour configurer la longueur du mot de passe, définissez le nombre dans la commande de découpe sur la longueur souhaitée, par exemple 24 caractères.
Vous ne voulez pas confondre 0 ou O, 1 ou l? Filtrez-le avec un autre
tr
Personnellement, je ne préfère jamais le caractère spécial dans le mot de passe, c'est pourquoi je ne choisis que
[:alnum:]
pour mon générateur de mot de passela source
Je maintiens
secpwgen
dans Alpine Linux et garde les sources sur mon Github .Il peut produire des chaînes de caractères aléatoires ou des phrases Diceware:
Pour générer une chaîne aléatoire de 13 caractères, vous utiliseriez:
Pour que les utilisateurs se souviennent d'un mot de passe, utilisez les expressions suivantes:
J'aime personnellement:
la source
Mon chemin pour un mot de passe très sécurisé (où 16 est la longueur de pw):
Exemple de résultat:
Ou alternativement, pour générer plusieurs mots de passe:
cat / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6
Exemple de résultat:
Peu moins sécurisé (jeu de caractères plus petit):
Exemple de résultat:
la source
Un moyen très facile et simple (probablement plus simple que ce que vous cherchez) pour y parvenir serait de générer un nombre aléatoire dans une plage donnée, de convertir ce nombre en son caractère ASCII équivalent et de l'ajouter à la fin d'une chaîne. .
Voici un exemple de base en Python:
EDIT: ajout de commentaires et de code pour générer plusieurs mots de passe et les écrire dans un fichier
la source
Je voudrais cette commande:
la source
date +%N
donné que si vous générez de nombreux utilisateurs et mots de passe dans un script, les secondes pourraient devenir identiques pour de nombreuses ou même pour toutes les commandes de date, produisant ainsi des mots de passe identiques.dd if=/dev/random bs=512 count=1
?Je vais, sur http://passwordsgenerator.net/, il permet de générer des chaînes de caractères aléatoires allant jusqu'à 2 048 caractères, en sélectionnant des majuscules, des minuscules, des chiffres de 0 à 9, des signes de ponctuation ou toute autre combinaison.
la source