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" );
tu sais, si dans C++ on t'a demandé de mettre ton post en forme avec des balises, c'est pas pour que tu viennes copier coller le meme post ici, toujours sans mise en forme.
Marsh Posté le 19-03-2012 à 22:18:51
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();
}