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

C++ Discussion :

Représentation de très grands nombres


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Représentation de très grands nombres
    J'ai comme projet de créer un logiciel de cryptage (du genre de PGP)

    Comment représenter en C les clés privées et publiques (très grands entiers sur énormément de bits ==> de l'ordre de 128 bits pour commencer)?

    Merci d'avance

    [MOD : En fait, il s'agit de C++]
    o=][::::::wozzy::::::>

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 103
    Points
    103
    Par défaut
    il faut créer une structure de type tableau de n éléments où n est le nombre de chiffres.
    A partir de là il convient de réécrire les opérations de base d'addition, multiplication, division, modulo...

  3. #3
    Bob
    Bob est déconnecté
    Membre éclairé
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 866
    Points
    866
    Par défaut
    Ou peut on trouver les algo des operations de base. Parce que j'ai deja essaye de faire une classe, mais les algos me manquaient.
    Bob, Rédacteur C/C++ & PHP
    http://bob.developpez.com/

  4. #4
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Je te conseille d'utiliser une librairie qui existe déjà, voir ma liste :
    http://www.haypocalc.com/lien.php

    Sinon, je me suis essayé à en écrire une, mais c'est galère-galère! Ces quelques pages pourront t'aider :
    http://www.haypocalc.com/grandnbr/

    @+ Haypo

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 103
    Points
    103
    Par défaut
    ces algos ne sont pas très durs. Il faut poser les opérations comme en CP ou CE1, travailler avec les retenues etc...

  6. #6
    Bob
    Bob est déconnecté
    Membre éclairé
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 866
    Points
    866
    Par défaut
    Non non, il ne faut pas poser les oprations comme a la main. ces algo sont bcp bcp bcp plus lents que ceux utlises par les processeurs.
    C'est ceux la qu'il faut utiliser (ex: multiplication a la russer) avec seulement des divisions par 2 et des additions.
    C'est ce genre d'algo que je cherche, mais aussi Division, modulo, Racine, enfin tt koi.
    Si qqn pouvait me dire ou trouvers ces algo ca serait super.
    Bob, Rédacteur C/C++ & PHP
    http://bob.developpez.com/

  7. #7
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    vous pourriez peut etre regarder la bibliotheque MP ici http://www.swox.com/gmp/.


    ZUL

  8. #8
    Membre chevronné
    Avatar de Geronimo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 156
    Points : 1 969
    Points
    1 969
    Par défaut
    J'ai justement eu le même problème.

    La librairie NTL est s'installe très bien et fonctionne très bien.

    De plus, elle a toutes les fonctions nécessaires de générations de nombres premiers, etc... très pratiques pour le cryptage.
    Une question concernant C++Builder ? Voici la réponse
    Consultez aussi les tutoriels de qualité de la section C/C++

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    bonjour,
    ah vous parler de NTL ça tombe bien, c'est une bibliotheque C++ qui permet de manipuler de tres grand nombres (je ne sais meme pas si il y a une limite) et de faire des operations dessus (les operrateurs ont ete redefinis et bien d autres encore...).

    j'ai téléchargé la bibliotheque sur le lien suivant: www.shoup.net/ntl

    Par contre je ne sais pas comment l'installer, est ce que je dois la compiler ou juste l'utiliser en la plaçant dans un endrois bien pricis sachant que j'utlise DEV C++.

    Merci
    la beauté est une demi faveur du ciel, l'intelligence est un don

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par tagwin
    bonjour,
    ah vous parler de NTL ça tombe bien, c'est une bibliotheque C++ qui permet de manipuler de tres grand nombres
    Tu développes en C ou en C++ ?
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    ouuups, je développe en C++ et j'utilise dev C++
    la beauté est une demi faveur du ciel, l'intelligence est un don

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Non non, il ne faut pas poser les oprations comme a la main. ces algo sont bcp bcp bcp plus lents que ceux utlises par les processeurs.
    C'est ceux la qu'il faut utiliser (ex: multiplication a la russer) avec seulement des divisions par 2 et des additions.
    C'est exactement le même algorithme que la multiplication classique qu'on voit au primaire sauf que c'est en base 2 et pas en base 10...
    Boost ftw

  13. #13
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Pour compléter ce qui a été dit, on peut aussi extrapoler ce principe au calcul de puissance (z = x ^ y).

    Ceci étant PGP est un programme libre dont le code source est téléchargeable (attention il existe une version spécifique Internationale qui pose moins (ou pas ?) de problèmes concernant les legislations diverses en cours dans notre pays et les US) et contient tout ce qui faut pour apprendre comment faire.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    Citation Envoyé par loufoque
    C'est exactement le même algorithme que la multiplication classique qu'on voit au primaire sauf que c'est en base 2 et pas en base 10...
    oui mais non, la multiplication "classique" est en O(n^2), alors qu'il existe d'autre methode un eu plus techniques (transformée de fourier rapide) qui descende en O(n log(n))

  15. #15
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jobherzt
    oui mais non, la multiplication "classique" est en O(n^2), alors qu'il existe d'autre methode un eu plus techniques (transformée de fourier rapide) qui descende en O(n log(n))
    Et qui n'est rentable qu'a partir d'une certaine taille. Pour 128 bits, je doute que ce soit le cas.

    Il y a aussi des algo en n^x avec x plus petit que 2. Si j'ai bonne memoire, il y a meme une famille de tel algo qui permet de choisir x aussi proche de 1 que desire.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  16. #16
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Et qui n'est rentable qu'a partir d'une certaine taille. Pour 128 bits, je doute que ce soit le cas.
    evidemment, il faudrait connaitre les constantes derriere, mais pour 128 bits il me semble qu'il faudrait que le rapport des contantes soit de l'ordre de 30 pour que ca revienne au meme....

    et puis n'oublions pas qu'en crypto on a vite fait de manipuler un peu plus que 128 bits..

  17. #17
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jobherzt
    evidemment, il faudrait connaitre les constantes derriere, mais pour 128 bits il me semble qu'il faudrait que le rapport des contantes soit de l'ordre de 30 pour que ca revienne au meme....

    et puis n'oublions pas qu'en crypto on a vite fait de manipuler un peu plus que 128 bits..
    De memoire gmp utilise l'algo n^2 jusqu'au moins 512 bits, puis utilise d'autres algos et n'utilise la FFT qu'au moins a partir de 50000 bits. L'algo a base de FFT est tres lourd (et delicat a mettre en oeuvre parce qu'il fait intervenir des flottants et donc il faut bien controler la precision).

    Pour 128 bits comme donne dans le message initial, je n'irais pas voir plus loin que l'algo classique.

    Pour de la crypto plus generale, je crois que dans un premier temps j'utiliserais gmp ou une autre bibliotheque du genre et qu'ensuite si j'ai un probleme de perf (ou du temps a perdre, ou un probleme de license), je testerais Karatsuba et Toom-Cook.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  18. #18
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    De memoire gmp utilise l'algo n^2 jusqu'au moins 512 bits, puis utilise d'autres algos et n'utilise la FFT qu'au moins a partir de 50000 bits. L'algo a base de FFT est tres lourd (et delicat a mettre en oeuvre parce qu'il fait intervenir des flottants et donc il faut bien controler la precision).
    ok, j'aurais appris quelque chose...

  19. #19
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Pour reprendre ce que je disais plus haut, l'algo de calcul x * y en décomposant y en base 2 est simple à comprendre :

    y = somme_sur_i(2 ^ yi) avec yi dans [0,1]

    Ensuite il suffit de développer :

    x * y = somme_sur_i(x * 2 ^ yi)

    On remplace donc une multiplication de 2 entiers, par des sommes de plusieurs entiers (plus rapide) et des décalages successifs à gauche (trés rapide).

    On peut même optimiser encore plus en faisant :

    z0 = x
    pour i dans [1, n], zi = zi-1 * 2

    Ainsi on calcul itérativement les x * 2 ^ yi d'aprés x * 2 ^ yi-1 ce qui beaucoup plus rapide.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  20. #20
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par mchk0123
    Pour reprendre ce que je disais plus haut, l'algo de calcul x * y en décomposant y en base 2 est simple à comprendre
    C'est un algo qu'on utilise pour batir une multiplication quand on n'a pas de multiplication fournie par le processeur, mais pas pour batir une multiplication en precision multiple. C'est plus simple d'appliquer la méthode scolaire (avec une expression des nombres dans une base convenablement choisie; 10_000 et 65_536 -- 2^16 -- sont deux bons candidats quand on dispose de l'arithmetique en 32 bits; 1_000_000_000 et 4_294_967_296 -- 2^32 -- quand on dispose de l'arithmétique en 64 bits).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. Manipulation de très grands nombres
    Par BernardT dans le forum Langage
    Réponses: 6
    Dernier message: 07/07/2006, 16h26
  2. Précision d'un très très grand nombre
    Par sniperseb dans le forum Langage
    Réponses: 6
    Dernier message: 05/04/2006, 19h38
  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