read /dev/urandom 3
Ce qui précède ne fonctionne pas. Comment puis-je lire des octets aléatoires /dev/urandom
dans bash?
read /dev/urandom 3
Ce qui précède ne fonctionne pas. Comment puis-je lire des octets aléatoires /dev/urandom
dans bash?
random="$(dd if=/dev/urandom bs=3 count=1)"
$()
marche?It treats the output of a command like a variable.
vous voulez dire en tant que chaîne, n'est-ce pas?$()
est assez universel, pas spécifique à Bash. En passant, faites attention de ne pas rencontrer de limitations sur les caractères que le shell peut stocker dans les variables - par exemple, la version de bash que j'ai testée avec des valeurs nulles (\ x00) dans la chaîne.(Si vous voulez des tirets littéraux, le tiret doit être placé à la fin de la chaîne, comme indiqué ci-dessus, par opposition à
*-_
).Et pour expliquer ce qui est fait grâce à l'ensemble de commandes ci-dessus:
head -c 500 /dev/urandom
: Obtenir les 500 premiers caractères (octets) de/dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Supprime tous les caractères spécifiés dans'a-zA-Z0-9~!@#$%^&*_-'
de la sortie de la première commande.fold -w 3
: Formate la sortie de la deuxième commande de telle sorte qu'elle ait 3 caractères par ligne.head -n 1
: Affiche la première ligne du résultat de la troisième commande surstdout
.la source
fold -w 3 | head -n 1
par unhead -c 3
si le nouveau caractère de ligne n'est pas nécessaire à la fin.Illegal byte sequence
erreur. Pour résoudre ce problème, utilisez le codage "C"; changez la commande en:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
S'il vous plaît vérifier
man od
.Vous pouvez utiliser, par exemple
od -vAn -N4 -tu4 < /dev/urandom
générer des nombres aléatoires non signés de 4 octets non signés.
la source
En voici un qui crée des chaînes base64; notez que même si elles sont limitées à des chaînes base64, le remplissage leur est enlevé. Par conséquent, vous ne pouvez pas les décoder, vous n'en aurez probablement pas besoin de toute façon.
Remplacez-le
5
par le nombre de caractères souhaité.Si vous avez toutefois besoin de les décoder pour une raison quelconque, déplacez-vous
base64
jusqu'au bout du tuyau. Il va ensuite collecter 5 caractères d'urandom et base64 l'encoder avec le bon remplissage, mais la chaîne finale risque d'être plus longue que ce que vous vouliez en raison du remplissage.la source
cat
lira beaucoup plus qu'une quantité donnée deN
caractères, et peut épuiser l'entropie. Pas de réponse utile.cat
puisque les deuxbase64
ethead
peut prendre un nom de fichier comme argument, dans ce cas , il fonctionne et ne doit pas appauvrir l'entropie. Voir stackoverflow.com/questions/10031344/…Essaye ça:
dd if=/dev/urandom bs=1 count=3
Si vous voulez mettre le résultat dans $ variable:
Notez que ce ne sera probablement pas imprimable.
la source
La solution la plus simple serait aussi simple que:
la source