Bizzare mon message est vide. Le voici :
--------------------------------------------------------------
Bonjour,
Je sollicite votre aide après plusieurs heures de pertes capillaires.
Je ne suis pas très très bon en maths, donc ça n'arrange rien, mais j'essaye de faire un effort :)
A des fins éducatives, il me faut dans un premier temps implémenter un cryptage pour le moins basique avec de petits chiffres.
Ci-dessous mon main :
int main()
{
srand(time(NULL)) ; // Initialise la randomization pour la fonction rand()
int p , q , e, n, d, i=0 , j=0 ,ok=0, euler;
while(ok==0)
{
while(i!=1)
{
p=gen_entier() ;
i=premier(p) ;
}
while(j!=1)
{
q=gen_entier() ;
j=premier(q) ;
}
n = (p*q) ;
euler = ((p - 1) * (q - 1)) ;
e=gen_entier() ;
d=gen_entier() ;
if ((pgcd(e, euler) 1) && ((d * e)%n 1))
{
ok=1;
}
else
{
ok=0;
}
}
printf("%d\n%d\n%d\n%d\n%d\n%d\n", p, q, n, euler, e, d) ;
return 0 ;
}
Jusqu'à l'indicatrice d'Euler, je ne dois pas être dans le faux. Pour "e" et "d" c'est une autre histoire.
Voici les fonctions liées :
int gen_entier()
{
int alea = rand()%11 ;
return alea ;
}
int premier (int n)
{
int i, pas_premier = 0 ;
// 0 et 1 ne peuvent pas être premiers
if (n < 2)
{
return 0 ;
}
else
{
for(i = 2 ; i <= (n/2) ; i++)
{
if (n / i ((n % i) + (n/i)) || n % 2 0)
{
pas_premier = 1 ;
break ;
}
}
if(pas_premier)
{
return 0 ;
}
else
{
return 1 ;
}
}
}
int pgcd(int m, int n)
{
if (n == 0)
{
return m ;
}
else
{
return pgcd(n, m%n) ;
}
}
Dans les indications que l'on m'a fourni, "e" doit être premier avec l'indicatrice d'Euler, d'où mon PGCD.
Par ailleurs pour le "d", les tests que j'ai fait me laissent très perplexe. J'ai du passer quoi qu'il arrive à côté d'un truc.
Si vous pouviez m'éclairer !
Merci d'avance.