IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Randint Overflow : Comment générer de très grands nombres premier en python


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Randint Overflow : Comment générer de très grands nombres premier en python
    Bonjour à tous,

    Je suis actuellement en train de préparer un TIPE de cryptographie, principalement sur le codage RSA, mais je suis confronté à un problème.

    En effet, je ne peux pas générer de nombres supérieurs à 1e308 (ce qui est déjà grand je vous le concède), car python me lève l'exception : "OverflowError: cannot convert float infinity to integer". Cependant, mon algorithme de Miller Rabin est bien loin de ses limites et reste un peu sur sa faim.

    De ce fait, je voudrais savoir s'il existe un moyen de surpasser cet overflow, soit par une astuce que je ne connais pas, ou bien en téléchargeant un module plus puissant que random (si ça existe).

    Voila, c’est pas primordial pour mon TIPE mais sa m’intéresse de savoir si je peux allez encore plus loin dans la génération d'entiers premiers.

    Enfin, j'utilise python 3.3 (sous spyder) avec le module Random.

    Merci beaucoup pour votre aide et pour vos réponses

    Denis

    PS : Python n'a aucun mal à me stocker des nombres de plus de 2000 chiffres, donc le problème vient bel et bien de randint (randrange possède la même limite).

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avez-vous pris connaissance de ce qui se dit sur random et la cryptographie ici : https://docs.python.org/3/library/random.html ?

    @+.
    Dernière modification par Invité ; 12/06/2014 à 22h43. Motif: Inutile de citer entièrement le message précédent

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ta méthode est bonne (randint + Miller-Rabin), mais il y a une petit erreur: 1e308 est un nombre flottant.

    Voilà comment on peut générer un nombre au hasard de 500 chiffres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print(randint(10**500, 10**501-1))
     
    602840927750645230812994914056080334614243416900514212712006926411872651583159559004108529460024934143403846213506465685992091942656287632053898494593258869587909641136147832710667852121177467398397077520646041471769789567631421069358710110074801391039073924535764748682408982558055881987991215337620910490527687382145503491321396124654502842215920318602340435292297399907453332259424240587231864981658035389854784123966071077859588337211968704233931583382060442859386700500940204208060626056605276105
    Avec un peu de calcul binaire, on peut aussi générer un nombre entier au hasard de x bits de long (512, 1024, 2048, etc...)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Merci beaucoup Tyrtamos, j'ai essayé et en effet ça fonctionne tout de suite mieux En effet, j'avais pas fait attention que 1e308 était un flottants.

    Tarball69, j'avais en effet vu cette page, mais je n'y avait pas trouvé ce que je cherchais (je le reconnais j'ai survolé plus que lu ). Par ailleurs, pour ce qui est de la sécurité des tirages pseudos aléatoires, je comptait m'y pencher plus tard, j'ai d'autre bug à corriger avant, et je préfère utiliser randint car pour l'instant je ne suis pas en mesure de justifier précisément en quoi l'autre méthode est favorable. Toutefois, je m'y consacrerais car cela m’intéresse tout de même.

    Encore merci à vous deux pour vos réponses rapides et claires

    Denis

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour la recherche d'un nombre premier au hasard, le fait que random n'ai pas une sécurité suffisante pour la cryptographie n'est pas grave, puisque tous les nombres sont testés par Miller-Rabin. Par contre, il ne faut pas oublier d'appeler random.seed() après l'importation de random, sinon on aura toujours la même série aléatoire à chaque lancement du programme.

    Le jour où tu cherches un générateur de nombre pseudo-aléatoire reconnu pour la cryptographie, regarde du côté de blum blum shub (http://fr.wikipedia.org/wiki/Blum_Blum_Shub). Il est assez facile à programmer en Python, et je me suis un peu amusé avec (http://python.jpvweb.com/mesrecettes...id=genalea_bbs).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] C# : comment générer un très grand nombre premier ?
    Par FredDidie dans le forum C#
    Réponses: 3
    Dernier message: 28/11/2014, 08h07
  2. comment gerer de trés grand nombres ? (> 4 octets)
    Par AliJava dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/05/2008, 16h33
  3. Réponses: 2
    Dernier message: 22/12/2005, 18h16
  4. Trés grand nombre
    Par rteuteu55 dans le forum C++Builder
    Réponses: 10
    Dernier message: 15/11/2005, 11h28
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo