Bonsoir,
j'ai bien executer un code concernant l'algorithme de cryptage RSA mais j'ai une grande besoin de m'aider pour que les clés p te q sont de 1024 bits.
1. choisir p et q deux nombres premiers.
2. calculer n = p * q
3. calculer l'indicatrice d'Euler phi = (p - 1)(q - 1)
4. Choisir e (exposant public) tel qu'il soit premier avec phi
5. Trouver d (exposant prive) tel que : (d * e) = 1 (mod phi)
la cle publique est donc (e; n) et la cle privee est (d; n)
6. Pour crypter un message M : c= M puissance e mod n
7. Pour décrypter un message crypté C : M= c puissance d mod n
#include "stdafx.h"
#include<stdio.h>
#include< conio.h>
#include <stdlib.h>
#include<math.h>
#include<iostream>
#include<string.h>
int phi,n,e,d,C,FLAG;
unsigned long int p , q ;
void primalité()
{
int Div;
Div = p - 1;
Div = q - 1;
//tester la primalité de p
if (((p % 2) == 0) && (p != 2)) {
printf("p Nombre non premier\n" );
}
else {
while (((p % Div) != 0) && (Div >= 1)){
Div--;}
if ((Div == 1) && (p / p == 1)){
printf("p Nombre premier\n" );
}
else {
printf("p Nombre non premier\n" );}
}
//tester la primalité de q
if (((q % 2) == 0) && (q != 2)) {
printf("q Nombre non premier\n" );
}
else {
while (((q % Div) != 0) && (Div >= 1)){
Div--;}
if ((Div == 1) && (q / q == 1)){
printf("q Nombre premier\n" );
}
else {
printf("q Nombre non premier\n" );}
}
}
int funct(char M)
{
int x;
for (int i=0; i< 500; i++)
{if(M >='a'&& M <='z')
x=M -96;
if(M >='A'&& M <='Z')
x=M -64;}
return x;
}
void main()
{
int n,e,s,ss,p2[30],flag[30], d, c[30], tra;
long double x,y;
unsigned long int div,div1;
char M[50];
printf("entrer les deux nombres premiers\t: " );
scanf("%d%d",&p,&q);
primalité();
n = p*q;
phi=(p-1)*(q-1);
printf("\n\tF(n)\t= %d",phi);
{
printf("\n\nEnter e\t: " );
scanf("%d",&e);
}while(FLAG==1);
d = 1;
do
{
s = (d*e)%phi;
d++;
}while(s!=1);
d = d-1;
printf("\n\tPublic Key\t: {%d,%d}\n",e,n);
printf("\n\tPrivate Key\t: {%d,%d}\n",d,n);
printf("Entrer le message \n" );
scanf("%s",M);
for(int i=0;i<strlen(M);i++)
{
flag[i]=0;
if(M[i]>='a'&& M[i]<='z')
flag[i]=1;
else
continue;
}
printf("Encryption:\n" );
for(int i=0;i < strlen(M);i++)
{
s=funct(M[i]);
x=pow(((long double)s),((long double)e));
div=(unsigned long int)x;
c[i]=div%n;
if(flag[i]==0)
printf("%c ",(c[i]+64));
else
printf("%c ",(c[i]+96));
}
printf("\nEntrer le message crypter\n" );
scanf("%s",M);
printf("\nDecryption:\n" );
for(int i=0; i < strlen(M);i++)
{
ss=funct(M[i]);
y=pow(((long double)ss),((long double)d));
div1=(unsigned long int)y;
p2[i]=div1%n;
if(flag[i]==0)
printf("%c ",(p2[i]+64));
else
printf("%c ",(p2[i]+96));
}
getch();
}