Comment obtenir une chaîne aléatoire de 32 chiffres hexadécimaux via la ligne de commande?
J'aimerais mettre ensemble une commande qui permet d'imprimer une chaîne de 32 chiffres hexadécimaux. J'ai un script Python qui fonctionne:
python -c 'import random ; print "".join(map(lambda t: format(t, "02X"), [random.randrange(256) for x in range(16)]))'
Cela génère une sortie comme:
6EF6B30F9E557F948C402C89002C7C8A
Ce dont j'ai besoin.
Sur un Mac, je peux même le faire:
uuidgen | tr -d '-'
Cependant, je n'ai pas accès à la plus sophistiquée, les langages de script ruby et python, et je ne serai pas sur un Mac (donc pas de uuidgen). J'ai besoin de coller avec plus de bash new'ish outils comme sed, awk, /dev/random parce que je suis limitée en termes de plate-forme. Est-il un moyen de faire cela?
head -c16 </dev/urandom|xxd -p -u
, peut-être?
Vous devez vous connecter pour publier un commentaire.
Si vous avez
hexdump
alors:devrait faire le travail.
Explication:
-n 16
à consommer de 16 octets de données d'entrée (32 chiffres hexadécimaux = 16 octets).4/4 "%08X"
pour itérer quatre fois, consommer 4 octets par itération et imprimer le correspondant de 32 bits de la valeur que 8 chiffres hexadécimaux, avec des zéros si nécessaire.1 "\n"
à la fin, avec un seul saut de ligne.Remarque: cette solution utilise
/dev/random
mais il pourrait tout aussi bien utiliser des/dev/urandom
. Le choix entre les deux est une question complexe et hors de la portée de cette réponse. Si vous n'êtes pas sûr, avoir un regard peut-être à cette autre question.%08X
est encore mieux si exactement 32 chiffres hexadécimaux sont nécessaires quand il y a des zéros non significatifs. J'ai modifié ma réponse en conséquence./dev/random
est lente. Vous ne pouvez pas lire de lui avec un ultra-haut débit. Cette question qui explique pourquoi. Ce n'est pas une question de ce que la langue que vous utilisez. Python aurait le même problème. Si vous ne vous souciez pas trop de la qualité du générateur aléatoire essayer/dev/urandom
à la place. Mais assurez-vous de comprendre la différence première./dev/urandom
. Dire qu'il est "de qualité inférieure" est un mythe. Voir 2uo.de/myths-about-urandom/dev/urandom
. Cependant, sans savoir de quoi il sera fait usage de la présente, je préfère ne pas recommander l'une ou l'autre. C'est une question plus complexe que ce que la plupart des gens pensent généralement.Si vous êtes à la recherche pour une seule commande et de disposer d'openssl installée, voir ci-dessous. Générer de l'aléatoire de 16 octets (32 hex symboles) et de l'encoder au format hexadécimal (aussi -base64 est pris en charge).
Il y a trois façons que je connais:
En utiliser une, commentez les deux autres.
od
est le plus commun. MacOS ahexdump
,xdd
, etod
. Git Bash (MinGW) avaitxxd
etod
. Docker image en fonction de l'Alpine Linux avaitod
(ettr
bien sûr). Et tous les trois plates-formes avaient/dev/urandom
. Donc, si vous êtes à la recherche pour le plus portable puis coller avec leod
saveur.Voici un peu plus d'options, qui ont la propriété de donner une évidente et facile de sélectionner directement la longueur de la chaîne de sortie. Dans tous les cas ci-dessous, en changeant le '32' à votre guise la longueur de la chaîne est tout ce que vous devez faire.
EDIT: Testé dans différentes coquilles.
head -c
de la réduire à un nombre impair.