Outils pour utilisateurs

Outils du site


genalea_bbs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
genalea_bbs [2012/03/20 09:43]
tyrtamos
genalea_bbs [2012/07/02 12:37] (Version actuelle)
tyrtamos
Ligne 160: Ligne 160:
 [1, 1, 6, 2, 7, 1, 1, 3, 7, 1, 0, 2, 2, 1, 1, 7, 1, 7, 0, 2, 6, 4, 1, 2, 4, 2, 6, 5, 6, 1, 3, 0, 4, 4, 5, 6, 6, 4, 4, 3, 4, 6, 7, 4, 3, 3, 5, 0, 2, 1] [1, 1, 6, 2, 7, 1, 1, 3, 7, 1, 0, 2, 2, 1, 1, 7, 1, 7, 0, 2, 6, 4, 1, 2, 4, 2, 6, 5, 6, 1, 3, 0, 4, 4, 5, 6, 6, 4, 4, 3, 4, 6, 7, 4, 3, 3, 5, 0, 2, 1]
 </​code>​ </​code>​
 +
 +
 +==== Générateur d'​octets (version rapide simplifiée) ====
 +
 +Comme on a souvent besoin d'un générateur d'​octets,​ on va en fabriquer un qui soit en même temps simple et rapide. ​
 +
 +Sa seule contrainte est qu'il nécessitera que pnp, le produit des 2 nombres premiers, ait au moins 24 chiffres décimaux: cela permettra de créer l'​octet avec seulement 2 calculs puis qu’alors on pourra extraire 4 bits en même temps à chacun des calculs, tout en respectant le log(log(pnp)). ​
 +
 +<code python>
 +def gen8bits_bbs(graine,​ pnp):
 +    """​itérateur retourne un octet au hasard selon le générateur Blum Blum Shub
 +       ​version rapide qui nécessite: ​ pnp à au moins 24 chiffres décimaux
 +    """​
 +    while True:
 +        graine = pow(graine, 2, pnp)
 +        r = graine & 15 # récup des 4 bits inférieurs
 +        graine = pow(graine, 2, pnp)
 +        r |= (graine & 15)<<​4 # récup et ajout des 4 bits supérieurs
 +        yield int(r) # retourne l'​octet ​
 +</​code>​
 +
 +Ce code est assez rapide: avec 2 nombres premiers de 512 bits, chaque nouvel octet ne demande que 6/100000 secondes!
  
 ==== Générateur de nombres entiers de n bits au hasard ==== ==== Générateur de nombres entiers de n bits au hasard ====
genalea_bbs.txt · Dernière modification: 2012/07/02 12:37 par tyrtamos