Algorithme RSA

douss4 Messages postés 25 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 23 mars 2010 - 2 avril 2009 à 00:28
douss4 Messages postés 25 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 23 mars 2010 - 2 avril 2009 à 11:04
Bonsoir,

J'ai essayé d'écrire un algorithme de cryptage (RSA). Le code à bien marché avec des int. J'ai changé les int par des float. Au moment du décryptage la console m'affiche un zéro. Le problème se trouve au niveau de la ligne suivnte : "*M=fmod((*M*C),n);"

Voici mon code :

#include<stdio.h>
#include<conio.h>
#include<math.h>

float pgcd(float x, float y)
{
 float r;

 while(y!=0)
 {
  r=fmod(x,y);
  x=y;
  y=r;
 }

 return x;

}

int check_prime_number(float x)
{
 float sqrt_n;
 int i;

 if (!fmod(x,2)) return 0;

 sqrt_n = sqrt(x);

  for (i = 3; i <= sqrt_n; i+=2) {
    if (!fmod(x,i)) return 0;
  }
  return 1;
}

int check_e(float PHI,float e,float p,float q)
{

 if((pgcd(PHI,e)==1)&&(e<PHI)&&(e!=p)&&(e!=q))
 return 1;
 else return 0;
}

float find_d(float PHI, float E)
{
 float d=1;

 while(fmod((E*d),PHI)!=1)
 {
  d++;
 }

 return d;
}

void encrypt(float M, float *C, float e, float n)
{
int i;
*C = 1;
for(i=0;i<e;i++)
*C=fmod((*C*M),n);
*C = fmod(*C,n);

}

void decrypt(float C, float *M, float d, float n)
{
int i;
*M = 1;
for(i=0;i<d;i++)
{
 *M=fmod((*M*C),n);
}
*M = fmod(*M,n);

}

void main()
{
 float M,c,f,p,q,n,phi,e,d;

 do
 {
  printf("\nDonner p (naturel premier) : ");
  scanf("%f",&p);
 }while(check_prime_number(p)==0);

 do
 {
  printf("\nDonner q (naturel premier) superieur a %.0f: ",p);
  scanf("%f",&q);
 }while((check_prime_number(q)==0)||(q<=p));

 printf("\nEnter votre cle : ");
 scanf("%f",&M);

 n = p*q;
 phi=(p-1)*(q-1);

 do
 {

  printf("\nDonner e (phi = %.0f ): ",phi);
  scanf("%f",&e);

 }while(check_e(phi,e,p,q)==0);

 encrypt(M,&c,e,n);

 printf("\nCle cryptee : %.0f",c);

 printf("\n\nEntrer la cle cryptee : ");
 scanf("%d",&c);

 d=find_d(phi,e);

 decrypt(c,&f,d,n);
 printf("\nCle decryptee : %.0f",f);
 getch();
}

Merci d'avance

4 réponses

titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
2 avril 2009 à 08:49
c'est du C# ca ? c'est pas plutot du CPP ?
0
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
2 avril 2009 à 10:27
remplace deja tes scanf par Console.Readline() et printf par Console.WriteLine()
Les pointeurs sont directement géré par C#

La connaissance est la plus grande des richesses.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 avril 2009 à 10:49
"remplace deja tes scanf par Console.Readline() et printf par Console.WriteLine()
Les pointeurs sont directement géré par C#"

En l'occurrence, c'est purement du C. (Pas loin Titeoe, mais en C++, on ne marque pas le .h dans les librairies et on utilise cout ou cin à la place de printf ou scanf)

Voilà un truc que j'ai trouvé sur un site :
Portability (fmod)


In C, only the <tt>double</tt> version of this function exists with this name.

Je suppose que ce n'est pas le problème, car les compilateurs C compilent généralement le C++ aussi, mais tu peux toujours regarder.

Ne connaissant absolument pas l'algorithme RSA, je ne peux pas plus t'aider, dsl.

Krimog :
while (!succeed = try()) ;
0
douss4 Messages postés 25 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 23 mars 2010
2 avril 2009 à 11:04
Merci beaucoup, mais je me suis trompée en choisissant le forum. Encore désolée de vous avoir dérangé.
0
Rejoignez-nous