Bonjour à tous, dans un programme je doit utiliser un cryptage RSA donc les clés seront générées depuis un mot de passe
Je n'en suis qu'au début mais je rencontre d'hors et déjà un problème lors de la définition des clés, en fonction des chiffres entrés au début (qui par la suite seront calculés par un autre algo) il est parfois impossible de définir une clé privée
Voici mon code:
Code :
- #include <stdio.h>
- #include <stdlib.h>
- int pgcd(int a, int b)
- {
- int k = 1, d = 1;
- for (k = 1; k <= a && k <= b; k++)
- if (a % k == 0 && b % k == 0)
- d = k;
- return d;
- }
- int main()
- {
- printf("Lancement du programme\n" );
- int p=35422;
- printf("p=%d\n", p);
- int q=38877;
- printf("q=%d\n", q);
- int n=p*q;
- printf("n=%d\n", n);
- int f=(p-1)*(q-1);
- printf("f=%d\n", f);
- int i=0;
- int PGCD1=0;
- int e=0;
- if(p>q)
- {
- e=p-1;
- }
- else
- {
- e=q-1;
- }
- while(PGCD1 != 1)
- {
- while(i==0)
- if(p<e && q<e && e<f)
- {
- i=1;
- }
- else
- {
- e++;
- }
- PGCD1 = pgcd(e, f);
- if(PGCD1!=1)
- {
- e++;
- }
- }
- printf("e=%d\n", e);
- int d=0;
- i=0;
- if(p>q)
- {
- d=p-1;
- }
- else
- {
- d=q-1;
- }
- while(i==0&&d<f)
- {
- if(e*d%f==1 && p<d && q<d && d<f)
- {
- i=1;
- }
- else
- {
- d++;
- }
- }
- if(i==1)
- {
- d=d-1;
- printf("d=%d", d);
- }
- else
- {
- printf("Impossible de definir une cle privee" );
- }
- return 0;
- }
|
En lançant ce programme tout ce passe bien et la console affiche:
Code :
- Lancement du programme
- p=35422
- q=38877
- n=1377101094
- f=1377026796
- e=38879
- d=596684466
|
Si par contre à la ligne 16 je remplace la valeur de p par "35422" la console affiche
Code :
- Lancement du programme
- p=35472
- q=38877
- n=1379044944
- f=1378970596
- e=38879
- Impossible de definir une cle privee
|
Cela vient t'il d'une erreur dans mon code?
Est-ce un problème connu et y a t'il une méthode simple pour l'éviter?
Ou dois-je redéfinir p chaque fois qu'aucune clé privée ne peux être générée?
Merci d'avance pour vos réponses
Nico-teeN