CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [C++] Algo erroné uniquement chez moi...

DébutPage précedente
1
Page suivantePage suivante
Pseudo supprimé
Niveau 10
16 avril 2014 à 21:00:08

Bonsoir à tous,
J'ai commencé ce matin la programmation en C++ après un peu de Python. Lors de mes exercices j'ai songé à réaliser une version simplifiée et schématisée de l'algorithme Diffie-Hellman, d'autant plus que ça me sera utile quand je vais présenter une approche de la Cryptographie pour débutant.

J'ai utilisé les commandes rudimentaires, je ne viens que de commencer aujourd'hui, et je suis plus ou moins parvenu à mes fins. En effet, j'ai bien utilisé la fonction y = (Y^x)%P, et le programme semble marcher. J'avais déjà réalisé auparavant le script en Python, dont les résultats concordaient parfaitement avec la représentation simplifiée qu'on retrouve dans des bouquins de Crypto. Je voulais vérifier les résultats.

Pour Y=11, P=13 et x=8, je dois normalement obtenir y=9. C'est d'ailleurs ce que me retourne mon script py. En revanche c'est une toute autre histoire pour mon programme console C++, lequel persiste à me répondre y=8.
Le plus surprenant, c'est que chez d'autres personnes, cela fonctionne parfaitement !

Images pour illustrer (ce n'est pas une blague) :
:d) Chez moi : https://image.noelshack.com/fichiers/2014/16/1397670466-bugx.png
:d) Chez Caletlog (merci à lui pour avoir testé) : https://image.noelshack.com/fichiers/2014/16/1397670212-wonderfall-cpp.png

Plus surprenant encore, le programme retourne une valeur correcte pour x=5 (Y & P idem qu'avant), soit y=7, ce qu'on est sensé obtenir. J'ai demandé l'avis de plusieurs personnes, passé quelques recherches, je n'ai rien trouvé...

Voici mon code :
http://pastebin.com/f36sevdN

Je vous remercie de vos futures réponses et bonne soirée. :o))

DayDennis DayDennis
MP
Niveau 10
16 avril 2014 à 21:30:53

serait pas car en fonction de l'os un int peut avoir une taille différent ou un double du coup ça tronque différement?(peu être je dis une connerie,je sais pas) mais demande au cas ou^^

DayDennis DayDennis
MP
Niveau 10
16 avril 2014 à 21:31:33

je veux dire entre 32 ou 64bits

Lucas490 Lucas490
MP
Niveau 2
16 avril 2014 à 21:34:02

J'ai remplacer tous les int par des double(en faisant un cast pour gérer le modulo) et j'obtiens bien 9 pour Y=11, P=13 et x=8.

Pseudo supprimé
Niveau 10
16 avril 2014 à 21:37:15

DayDennis :d) Venant du doux monde des langages interprétés je n'en sais strictement rien, mais beaucoup ont testé et obtiennent 9 également (sûrement testé sur une archi x64).

Lucas490 :d) D'accord ! Mais sans aucune modification, trouves-tu également 9 ? :)

Pseudo supprimé
Niveau 10
16 avril 2014 à 21:42:38

Comme quelqu'un m'a lancé sur l'idée, (pow(Y,x)) dépasserait la valeur d'un int ?

Caletlog Caletlog
MP
Niveau 10
16 avril 2014 à 21:45:26

Essaye toi-même avec des doubles ou des (unsigned) long, sinon.

Pseudo supprimé
Niveau 10
16 avril 2014 à 21:46:58

Résolu !

Code corrigé :
http://pastebin.com/bg7GfVa2

Pseudo supprimé
Niveau 10
16 avril 2014 à 21:49:55

Je pense que c'était l'idée de Lucas490, j'ai viré tous les int pour des double, et j'ai utilisé la fonction fmod (modulo) qui passe avec double sans soucis. Maintenant ça tolère de plus grands nombres, avant 11^8 était sûrement trop grand pour une variable int.

Je me coucherai moins bête ! :fier:

Lucas490 Lucas490
MP
Niveau 2
16 avril 2014 à 22:06:51

J'obtenais 8 aussi avec la source originale.

11^8 = 214 358 881

Mais avec la source originale j'obtiens ça:
https://image.noelshack.com/fichiers/2014/16/1397678521-bug.png

11^8 = 214 358 880
-> d'où le décalage de 1

En vérifiant avec la fonction sizeof, l'entier est codé sur 32bits donc largement suffisant pour 11^8.

Pseudo supprimé
Niveau 10
16 avril 2014 à 22:19:01

Et ça dépend surtout du compilateur du coup ? Définir la taille de l'int sur 64bits ?
Puisque chez certains ça marchait avec le code source original...

DayDennis DayDennis
MP
Niveau 10
16 avril 2014 à 22:22:15

ah le type c'est qui ça marchait il avait compilé chez lui

BuretteGraduee BuretteGraduee
MP
Niveau 10
16 avril 2014 à 23:27:06

C'est quoi ca distrib linux ? :bave:

Pseudo supprimé
Niveau 10
17 avril 2014 à 07:43:43

Debian avec Subtle WM et une joulie config :oui:

Pseudo supprimé
Niveau 10
17 avril 2014 à 11:38:12

Xmonad plutôt. :-p

Caletlog Caletlog
MP
Niveau 10
17 avril 2014 à 11:46:47

Perdu, là c'est BSPWM :o))

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment