Bash random

De knowledge
Version datée du 8 avril 2026 à 08:49 par Jpinon (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Les ordinateurs savent faire beaucoup de chose mais ont beaucoup de mal avec le hasard. Leur conception déterministe ne les prédispose pas à ce genre de travail. Deux solutions émergent:

  • Se baser sur un phénomène physique aléatoire ou réputé tel mais c'est très difficile et il faut avoir un capteur pour cela.
  • Utiliser un algorithme pseudo aléatoire. La suite de nombre sera réputé aléatoire même su toujours la même. Exemple les chiffres de PI. La suite est aléatoire mais commence toujours par 3.14... l'ordinateur utilise souvent le temps pour prendre "en marche" cette séquence.

Sulution basée sur des répétitions de uuid

Dans la page de génération de uuid j'avais mentionné la disponibillité d'un outil de génération :

cat /proc/sys/kernel/random/uuid

Qui nous donne des chaines du type :

45448407-faf9-42af-af54-fbe6194a510c

Le script suivant :

while [ 1 ]
do 
  export RND=`cat /proc/sys/kernel/random/uuid  | cut -b 1-8,10-13,15-18,20-23,25-`
  echo -n $RND
done

Va nous donner une suite ininterrompue de digits en hexa. Si on veut du binaire xxd est notre amis mai, attention, le binaire n'est pas affichable. On redirige vers un fichier.

while [ 1 ]
  do 
  export RND=`cat /proc/sys/kernel/random/uuid  | cut -b 1-8,10-13,15-18,20-23,25-`
  echo -n $RND
done | xxd -r -p > binary-random.bin

On fait tourner ce scriot quelques secondes et on l'arrête par <CTRL>+C.

On récupère un fichier binaire aléatoire.

On peut l'afficher avec od -x ou avec base64 par exemple.