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