code RSA

code RSA - C++ - Programmation

Marsh Posté le 18-03-2012 à 21:53:52    

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();
}
[#FF1C00][/#FF1C00]

Reply

Marsh Posté le 18-03-2012 à 21:53:52   

Reply

Marsh Posté le 19-03-2012 à 11:29:09    

Bonjour,
Je serais incapable t'aider concernant l'algo, mais pour que les autres puissent t'aider, édites ton poste et encadre ton listing avec les balises < code > (le bouton c/c++)
pour l'indentation et la coloration syntaxique ( là c'est quasi illisible)


---------------
Seul Google le sait...
Reply

Sujets relatifs:

Leave a Replay

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