code RSA

code RSA - C - Programmation

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();  
}

Reply

Marsh Posté le 19-03-2012 à 22:18:51   

Reply

Marsh Posté le 20-03-2012 à 17:49:48    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed