Advertisement
jokerhacker

projet c++

Sep 6th, 2011
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.32 KB | None | 0 0
  1. // projet(essai final).cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. //****** la classe rsa_gmp.h *******
  5. #include<iostream>
  6. #include "stdafx.h"
  7. #include <string.h>
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <mpir.h>
  11. #include <time.h>
  12. using namespace std;
  13.  
  14.  
  15. class Class_one {
  16. private:
  17.     string fichierSource;
  18.     string fichierDest;
  19.     int tailleBloc ;
  20. public:  
  21.     Class_one();
  22.     void PGCD (mpz_t ,mpz_t,mpz_t);
  23.     void puissance(mpz_t,mpz_t,mpz_t,mpz_t);
  24.     void test_primalite(mpz_t,mpz_t);
  25.     void InitialiseRandom(gmp_randstate_t );
  26.     void nextprime (mpz_ptr , mpz_srcptr ) ;
  27.     void Genere_publicKey( mpz_t  ,mpz_t  , mpz_t ,gmp_randstate_t  );
  28.     void Genere_privateKey (mpz_t  , mpz_t  , mpz_t ) ;
  29.     void Genere_nbPremier( mpz_t , mpz_t , int , gmp_randstate_t  ) ;
  30.     void chiffre_Msg( mpz_t , mpz_t , mpz_t , mpz_t );  
  31.     void dechiffre_Msg( mpz_t , mpz_t  , mpz_t , mpz_t );
  32.     short int SetFichiers(string nomFichierDest, string nomFichierSource);
  33.     string DeTranscoder(mpz_t  );
  34.     mpz_t Transcoder(string str) ;
  35.     ~Class_one();
  36. }
  37.  
  38.  
  39. Class_one::Class_one(){
  40.  
  41.     this->fichierDest="";
  42.     this->fichierSource="";
  43.     this->tailleBloc=256;
  44. };
  45. Class_one::~Class_one(){};
  46.  
  47. void  Class_one::PGCD ( mpz_t resultat, mpz_t a , mpz_t b )
  48. {
  49.     mpz_t r , r1 ,r2;
  50.  
  51.     //intialiser les variables
  52.     mpz_init( r );
  53.     mpz_init( r1 );
  54.     mpz_init( r2 );
  55.  
  56.     // affectation
  57.     mpz_set (r , a ) ;
  58.     mpz_set (r1 , b) ;
  59.  
  60.     while ( mpz_cmp_ui ( r1, 0) != 0)
  61.     {
  62.         mpz_mod ( r2, r, r1);
  63.         mpz_set (r , r1 ) ;
  64.         mpz_set (r1 , r2) ;
  65.     }
  66.  
  67.     mpz_set (resultat , r) ;
  68.     // liberer l'espace de variable
  69.     mpz_clear( r );
  70.     mpz_clear( r1 );
  71.     mpz_clear( r2 );
  72.  
  73. }
  74.  
  75.  
  76. void Class_one::puissance (mpz_t resultat ,mpz_t a, mpz_t e, mpz_t n)
  77. {
  78.     mpz_t temp,t,a_bis,e_bis ;
  79.     // initialise la variable local
  80.     mpz_init( temp );
  81.     mpz_init( t );
  82.  
  83.     mpz_init( a_bis );
  84.     mpz_set( a_bis , a );
  85.  
  86.     mpz_init( e_bis );
  87.     mpz_set( e_bis , e );
  88.  
  89.     mpz_set_ui (temp , 1);
  90.  
  91.     while ( mpz_cmp_ui ( e_bis,0 )> 0)
  92.     {
  93.         mpz_mod_ui( t , e_bis , 2);
  94.         if( mpz_cmp_ui( t , 0 ) != 0)
  95.         {
  96.             mpz_mul( temp , temp , a_bis);
  97.             mpz_mod( temp , temp ,n );
  98.         }
  99.         mpz_mul(a_bis , a_bis, a_bis);
  100.         mpz_mod ( a_bis, a_bis, n);
  101.  
  102.         mpz_tdiv_q_ui(e_bis,e_bis,2);
  103.     }
  104.  
  105.     mpz_set( resultat , temp );
  106.     // liberer l'espace utilisé
  107.     mpz_clear( temp );mpz_clear(t);
  108.     mpz_clear(a_bis );mpz_clear(e_bis );
  109.  
  110. }
  111.  
  112.  
  113. /*
  114. La test_primalite verifie si un nombre est premier,c'est une application
  115. de Miller_Rabin
  116. @ param long a, n( mod n)
  117. @return 1 ou 0
  118. */
  119. void Class_one::test_primalite ( mpz_t resultat , mpz_t n)
  120. {
  121.     mpz_t var ,p, e, m , i , k ,temp ;
  122.     // initialiser les variables locals
  123.     mpz_init(var) ;mpz_init(p) ;mpz_init(e) ;mpz_init( temp ) ;
  124.     mpz_init( m) ;mpz_init( i) ;mpz_init( k) ;
  125.  
  126.     mpz_sub_ui ( m , n , 1);
  127.     mpz_sub_ui ( e , n , 1);
  128.     mpz_set_ui( var , 10 );
  129.  
  130.     mpz_set_ui ( k , 0 );
  131.     mpz_mod_ui ( temp , e , 2);
  132.  
  133.     while ( mpz_cmp_ui ( temp , 0 )== 0)
  134.     {
  135.         mpz_tdiv_q_ui( e , e , 2);
  136.         mpz_add_ui ( k , k , 1);
  137.         mpz_mod_ui ( temp , e , 2);
  138.     }
  139.  
  140.     Class_one::puissance( mpz_t p ,mpz_t var ,mpz_t  e , mpz_t n );
  141.  
  142.     if( mpz_cmp_ui ( p , 1) == 0)
  143.     {
  144.         mpz_set_ui( resultat , 1);
  145.         return;
  146.     }
  147.  
  148.     mpz_set_ui( i , 0);
  149.  
  150.     while( mpz_cmp ( i , k ) < 0)
  151.     {
  152.         if( mpz_cmp( p , m )== 0)
  153.         {
  154.             mpz_set_ui( resultat , 1);
  155.             break ;
  156.         }
  157.  
  158.         if( mpz_cmp_ui( p , 1 )== 0)
  159.         {
  160.             mpz_set_ui( resultat , 0);
  161.             break ;
  162.         }
  163.  
  164.         mpz_mul( p, p , p );
  165.         mpz_mod( p , p , n) ;
  166.  
  167.         mpz_add_ui (i, i , 1);
  168.     }
  169.  
  170.  
  171.     // liberer l'espace utilisé par les variables locals
  172.     mpz_init(var) ;mpz_init(p) ; mpz_init(e) ;mpz_init(temp) ;
  173.     mpz_init( m) ;mpz_init( i) ;mpz_init( k) ;
  174. }
  175.  
  176.  
  177. // la fonction initializeRandom permet d,initialiser le generateur de nombre aleatoire
  178. void Class_one::InitialiseRandom(gmp_randstate_t r_state )
  179. {
  180.     /* Initialisation de nombre aleatoire*/
  181.     unsigned long int seed;
  182.     seed = time(0);
  183.  
  184.     gmp_randinit_default (r_state);
  185.     gmp_randseed_ui(r_state, seed);
  186. }
  187.  
  188.  
  189. // le nextprime permet de calculer le nombre premier suivant
  190. void Class_one::nextprime (mpz_ptr p, mpz_srcptr t)
  191. {
  192.     mpz_t test ;
  193.     mpz_init( test );
  194.     mpz_add_ui (p, t, 13);
  195.  
  196.     void Class_one::test_primalite ( mpz_t test ,mpz_t  p);
  197.     while (mpz_cmp_ui( test , 0)!= 1 )
  198.     {
  199.         mpz_add_ui (p, p, 13);
  200.         void Class_one::test_primalite ( mpz_t test , mpz_t p);
  201.     }
  202.  
  203. }
  204.  
  205.  
  206.  
  207. // la fonction genere_PK() permet de créer la clé public e
  208.  
  209. void Class_one:: Genere_publicKey( mpz_t e ,mpz_t p , mpz_t q ,gmp_randstate_t state )
  210. {
  211.     mpz_t a , b , c, r , y ,rand_Num;
  212.  
  213.     // initialiser les avriable locale
  214.     mpz_init( a );
  215.     mpz_init( b );
  216.     mpz_init( c );
  217.     mpz_init( y );
  218.     mpz_init( r );
  219.     mpz_init( rand_Num );
  220.  
  221.     mpz_sub_ui( a, p, 1 );
  222.     mpz_sub_ui( b, q, 1 );
  223.  
  224.     mpz_mul( y, a, b );
  225.  
  226.     //Définition d'une valeur max de E.
  227.     mpz_t max;
  228.     mpz_init( max );
  229.     mpz_set_str ( max , "97" ,0);
  230.  
  231.     mpz_urandomm( rand_Num, state, max );
  232.     mpz_add_ui ( rand_Num , rand_Num , 3);
  233.     mpz_mod(c,rand_Num,y);
  234.     void Class_one::PGCD( mpz_t r , mpz_t c, mpz_t y);
  235.  
  236.     while (( mpz_cmp_ui( r,1 )!= 0) ||mpz_cmp( c ,max )>0 ||mpz_cmp_ui( c ,0) ==0 )
  237.     {
  238.         mpz_urandomm( rand_Num, state, max );
  239.         mpz_add_ui ( rand_Num , rand_Num , 3);
  240.         mpz_mod(c,rand_Num,y);
  241.         void Class_one::PGCD( mpz_t r , mpz_t c, mpz_t y);
  242.     }
  243.     mpz_set( e ,c ) ;
  244.     // effacer les espaces utilisées par les variables
  245.     mpz_clear( a );mpz_clear( b );mpz_clear( y );mpz_clear( r );
  246.     mpz_clear( rand_Num );mpz_clear( max );mpz_clear( c );
  247.  
  248.  
  249. }
  250.  
  251.  
  252.  
  253. // La fonction genere_privateKey permet de determiner la clé public
  254. // algorithme euclide etendu
  255. void Class_one::Genere_privateKey (mpz_t d , mpz_t e , mpz_t phi)
  256. {
  257.     mpz_t e0,t0 , t , q, r, n0, temp ,temp2;
  258.  
  259.     // initialiser les variables
  260.     mpz_init ( e0);mpz_init ( t0 );mpz_init ( t );mpz_init ( q );
  261.     mpz_init ( r );mpz_init ( n0 );mpz_init ( temp );mpz_init ( temp2 );
  262.  
  263.     mpz_set_ui( t , 1) ;
  264.     mpz_set ( n0 , phi );
  265.     mpz_set ( e0 , e );
  266.     mpz_tdiv_q( q , n0 , e0);
  267.     mpz_mod ( r ,n0 , e0) ;
  268.  
  269.     while( mpz_cmp_ui ( r, 0) > 0)
  270.     {
  271.         mpz_mul( temp , q, t);
  272.         mpz_sub( temp , t0, temp );
  273.  
  274.         if( mpz_cmp_ui ( temp , 0) >= 0)
  275.         {
  276.             mpz_mod ( temp , temp ,phi);
  277.         }
  278.         else
  279.         {
  280.             mpz_mod( temp , temp , phi);
  281.         }
  282.  
  283.         mpz_set( t0 , t);
  284.         mpz_set( t , temp);
  285.         mpz_set( n0, e0);
  286.         mpz_set( e0, r);
  287.         mpz_tdiv_q( q , n0 , e0);
  288.         mpz_mod ( r ,n0 , e0) ;
  289.  
  290.     }
  291.     mpz_set ( d , t);
  292.     // liberer l'espaces des variables
  293.     mpz_clear( e0 );mpz_clear( t0 );mpz_clear( t );mpz_clear( q );
  294.     mpz_clear( r );mpz_clear( n0 );mpz_clear( temp );mpz_clear( temp2 );
  295. }
  296.  
  297.  
  298.  
  299.  
  300. /*
  301. La fonction Genere_nbPremier retourne les deux entiers P et Q
  302. aleatoires et premiers
  303. */
  304.  
  305. void Class_one::Genere_nbPremier( mpz_t p, mpz_t q, int n, gmp_randstate_t state )
  306. {
  307.     //création de varaiable locale
  308.     mpz_t rand, nb_aleatoire, max , min , varp , varq;
  309.  
  310.     // initialiser les variables
  311.     mpz_init( rand ); mpz_init( nb_aleatoire ); mpz_init( max );
  312.     mpz_init( min );mpz_init( varp );mpz_init( varq );
  313.  
  314.     // calcule du Borne Superieur
  315.     mpz_ui_pow_ui( max, 2, n+1 );
  316.     // calcule du borne inferieur
  317.     mpz_ui_pow_ui( min, 2, n );
  318.  
  319.     // Génère un nombre compris entre 0 et max et le stocke dans rand. state initialise le générateur aléatoire.
  320.     do
  321.     {
  322.         mpz_urandomm( rand, state, max );
  323.  
  324.     }while( mpz_cmp( rand, min) > 0 );
  325.     // Vérifie que rand est supérieur à la borne inférieure
  326.     void Class_one::nextprime ( mpz_ptr p ,mpz_srcptr  rand );
  327.  
  328.     // Génère un nombre Q compris entre 0 et max et le stocke dans rand. state initialise le générateur aléatoire.
  329.     do
  330.     {
  331.         mpz_urandomm( nb_aleatoire, state, max );
  332.  
  333.     }while(( mpz_cmp( nb_aleatoire, min) > 0 )|| ( mpz_cmp ( p , q ) == 0));
  334.     // Vérifie que rand est supérieur à la borne inférieure
  335.     void Class_one::nextprime(mpz_ptr q ,mpz_srcptr  nb_aleatoire );
  336.  
  337.     // clear l'espace utilisé
  338.     mpz_clear( nb_aleatoire );mpz_clear( rand );mpz_clear( max );
  339.     mpz_clear( min );mpz_clear( varq );mpz_clear( varp );
  340.  
  341. }
  342.  
  343. // fonction de chiffrement de message
  344. void Class_one::chiffre_Msg( mpz_t chiffre, mpz_t message , mpz_t e, mpz_t n)
  345. {
  346.     mpz_t cipher;
  347.     mpz_t i;
  348.     mpz_t temp;
  349.  
  350.     mpz_init(cipher);
  351.     mpz_init(i);
  352.     mpz_init(temp);
  353.     mpz_set_si(cipher,1);
  354.  
  355.     void Class_one::puissance (mpz_t cipher ,mpz_t message,mpz_t  e,mpz_t  n);
  356.     mpz_set(chiffre,cipher);
  357.  
  358.     mpz_clear(cipher);
  359.     mpz_clear(temp);
  360. }
  361.  
  362.  
  363. // fonction dechiffrement de message
  364. void Class_one:: dechiffre_Msg( mpz_t message2, mpz_t chiffre , mpz_t d, mpz_t n)
  365. {
  366.     mpz_t message;
  367.     mpz_t i;
  368.     mpz_t temp;
  369.  
  370.     mpz_init(message);
  371.     mpz_init(i);
  372.     mpz_init(temp);
  373.     mpz_set(temp,chiffre);
  374.  
  375.     void Class_one::puissance ( mpz_t message,mpz_t temp ,mpz_t  d,mpz_t  n);
  376.     mpz_set(message2,message);
  377.  
  378.     mpz_clear(message);
  379.     mpz_clear(temp);
  380. }
  381.  
  382. short int Class_one::SetFichiers(string nomFichierDest, string nomFichierSource)
  383. {
  384.     FILE *f1;
  385.     FILE *f2;
  386.     f1=fopen(nomFichierSource.c_str(), "rb");
  387.     f2=fopen(nomFichierDest.c_str(), "wb");
  388.  
  389.     if(f1==NULL || f2==NULL)
  390.     {
  391.         if (f1!=NULL)   fclose(f1);
  392.         if (f2!=NULL)   fclose(f2);
  393.         return -1;
  394.     }
  395.  
  396.     fclose(f1);
  397.     fclose(f2);
  398.     this->fichierDest=""+nomFichierDest;
  399.     this->fichierSource=""+nomFichierSource;
  400.     return 0;
  401. }
  402. mpz_t Class_one::Transcoder(string str)/*
  403. La méthode Transcoder : Cette méthode prend une chaine de caractères, puis la transforme en un nombre équivalent. Le nombre est égale à la somme du
  404. code ascii dernier caractère, l’avant dernier multiplié par 256, l’avant avant dernier multiplié par 2562…etc
  405. */
  406. {
  407.     mpz_t Somme;
  408.     mpz_t var;
  409.     mpz_t M;
  410.     mpz_t Mul;
  411.     mpz_t resultat ;
  412.     signed long long int i;
  413.     //initialisation des variables
  414.     mpz_init(Somme);mpz_init(var);
  415.     mpz_init(Mul);
  416.     mpz_init(resultat);
  417.  
  418.     //affectation
  419.     mpz_set_ui(M,1);
  420.  
  421.    
  422.     for(i=(signed long long int)(str.length()-1); i>=0; i--)
  423.     {
  424.    
  425.  
  426.         aux =(unsigned char)str[(unsigned int)i];//La classe string est composé de signed char
  427.         void Class_one::puissance(mpz_t resultat ,mpz_t  256 , mpz_t i, mpzt n);
  428.         mpz_mul(Mul,resultat,aux);
  429.         mpz_add(Somme,Somme, Mul);
  430.     }
  431.     return Somme ;
  432.     mpz_clear(Somme);mpz_clear(var);mpz_clear(Mul);mpz_clear(resultat);
  433. }
  434.  
  435. string Class_one::DeTranscoder(mpz_t  msg)
  436. /*La méthode DeTranscoder : En prenant un nombre en paramètre,
  437. elle génère une chaine de caractères équivalente, le nombre va être divisé par 256 en concaténant la chaine
  438. déjà trouvée et le caractère dont le code ascii est le reste de la division par 256.*/
  439.  
  440. {
  441.     mpz_t div;
  442.     mpz_t aux;
  443.     mpz_t reste;
  444.     string str;
  445.     //initialiser les variables
  446.     mpz_init(div);mpz_init(aux);mpz_init(reste);
  447.     // affectation
  448.     mpz_set(aux,msg);
  449.     mpz_set_ui(div,256);
  450.     while(aux.size()>1 || aux!=0)
  451.     {
  452.         aux=mpz_div(aux, div, reste);
  453.         str=(char)reste + str;
  454.     }
  455.     return str;
  456.     //liberer  les variables
  457.     mpz_clear(div); mpz_clear(aux); mpz_clear(reste);
  458. }
  459.  
  460.  
  461. class Cryptage{
  462.     void crypter_RSA();
  463. }
  464.  
  465. // la fonction principal du rsa en mode Standard
  466.  
  467. void Cryptage::crypter_RSA()
  468. {
  469.     // Variable locales
  470.     mpz_t p , q , e,d , n , phi , message,msg_chiffre,cipher ;
  471.     int choix ;
  472.  
  473.     //initialiser les variables locales
  474.     mpz_init(msg_chiffre);  mpz_init(cipher);
  475.     mpz_init(e); mpz_init(n); mpz_init(p);
  476.     mpz_init(q); mpz_init(d); mpz_init(phi);
  477.     ;mpz_init( message);
  478.  
  479.     // initialisationn du generateur
  480.     gmp_randstate_t state;
  481.     Class_one::InitialiseRandom(gmp_randstate_t state);
  482.     Class_one::Genere_nbPremier(mpz_t  p,mpz_tq ,mpz_t 512, gmp_randstate_t state);
  483.  
  484.     // la valeur de N
  485.     mpz_mul ( n , p , q);
  486.  
  487.     // les variablesP et Q
  488.     gmp_printf ("\n\n \t P \t: \t%Zd \n", p );
  489.     gmp_printf ("\n\n \t Q \t: \t%Zd \n", q );
  490.  
  491.     // Generer la clé public
  492.     Class_one::Genere_publicKey( mpz_t e, mpz_t p ,mpz_t q , gmp_randstate_t state);
  493.     gmp_printf("\n\n \t clef pubic : \t%Zd \n",e);
  494.  
  495.     // Calculer la valeur de phi
  496.     mpz_sub_ui( p , p , 1);
  497.     mpz_sub_ui( q , q , 1);
  498.     mpz_mul( phi , p , q) ;
  499.  
  500.     // genere la cle privee
  501.     Class_one::Genere_privateKey (mpz_t d ,mpz_t e , mpz_t phi );
  502.     gmp_printf("\n\n \t clef prive : \t%Zd \n",d);
  503.  
  504.     // set fichier
  505.     short int index= Class_one::SetFichiers(string nomFichierDest, string nomFichierSource);
  506.     while (index!=0) {
  507.     index= Class_one::SetFichiers(string nomFichierDest, string nomFichierSource);
  508.     }
  509.  
  510.     // le message a chiffre // le message a chiffre
  511.     printf("\n\n\n\t Entrez le message a crypter: ");
  512.     gmp_scanf("%Zd",&message);
  513.  
  514.     cout<<"entrer \n 1)crypter\ n2)decrypter "<<endl;
  515.     cin>>choix;
  516.     switch(choix)
  517.     {
  518.     case 1 :
  519.     //dechiffrement du message
  520.           unsigned long long int j,nbZero,m;
  521.         FILE *f1;        
  522.         FILE *f2;
  523.         string str;
  524.         string str2="e";
  525.         string str3;
  526.         mpz_t  msg;
  527.         if(fichierSource.length()<1) break ;
  528.         f1=fopen(this->fichierSource.c_str(), "rb");
  529.         f2=fopen(this->fichierDest.c_str(), "wb");
  530.         fseek(f1,0,SEEK_SET);
  531.         for(j=0,m=1, nbZero=0;j<8;j++,m*=256) nbZero+=fgetc(f1)*m;
  532.         str2[0]=fgetc(f1);
  533.         while(str2[0]!=EOF)
  534.         {
  535.             str=""+str2;
  536.             for(j=1;j<this->tailleBloc_; j++)
  537.             {
  538.                 str2[0]=fgetc(f1);
  539.                 str=str+ str2 ;
  540.             }
  541.             str2[0]=fgetc(f1);
  542.  
  543.             msg=Class_one::Transcoder(str);
  544.             Class_one::CrypterDecrypter(mpz_t msg,mpz_t ,mpz_t ,mpz_t);
  545.  
  546.             if (str2[0]==EOF)
  547.             {
  548.                 for(j=0;j<(this->tailleBloc - nbZero); j++)
  549.                     fputc((int)str[j], f2);
  550.             }
  551.             else
  552.                 for(j=0;j<this->tailleBloc ; j++)   fputc((int)str[j], f2);
  553.         }
  554.         fclose(f1);
  555.         fclose(f2);
  556.                
  557.     Class_one::dechiffre_Msg (mpz_t cipher, mpz_t msg_chiffre ,mpz_t d ,mpz_t n);
  558.     gmp_printf("\n\n\t Le message dechiffre :\t%Zd\n\n",cipher);
  559.     break ;
  560.  
  561.     case 2 :
  562.     //chiffrement du message
  563.     mpz_init_set_str(cipher, "1",0);
  564.      unsigned long long int j,aux;
  565.             FILE *f1, *f2;
  566.             unsigned char c;
  567.             unsigned long long int nbZero ;
  568.             string str ;
  569.             string str2="e";
  570.             mpz_t  msg;
  571.  
  572.             if(fichierSource.length()<1) return -1;
  573.             f1=fopen(this->fichierSource.c_str(), "rb");
  574.             f2=fopen(this->fichierDest.c_str(), "wb");
  575.             str2[0]=fgetc(f1);
  576.             if (str2[0]==EOF) break ;
  577.             fseek(f1, 0, SEEK_END);
  578.             //fpos_t <==> long long int pour notre compilateur
  579.             fgetpos(f1,(fpos_t *)&nbZero);
  580.             nbZero=nbZero%this->tailleBloc;
  581.             if(nbZero!=0) nbZero=this->tailleBloc - nbZero;
  582.  
  583.             aux=nbZero;
  584.             for(j=0;j<8;j++)
  585.             {
  586.                 c=aux%256;
  587.                 aux=aux/256;
  588.                 fputc(c,f2);
  589.             }
  590.  
  591.             fseek(f1,0, SEEK_SET);
  592.             str2[0]=fgetc(f1);
  593.             while(str2[0]!=EOF)
  594.             {
  595.                 str=""+str2;
  596.                 for(j=1;j<(this->tailleBloc); j++)
  597.                 {
  598.                     str2[0]=fgetc(f1);
  599.                     str=str+str2 ;
  600.                 }
  601.                 str2[0]=fgetc(f1);
  602.                 if(str2[0]==EOF)
  603.                 {
  604.                     for(j=this->tailleBloc-nbZero; j< this->tailleBloc; j++)
  605.                         str[j]=0;
  606.                 }
  607.                 /*for(j=str.length();j<this->tailleBloc_; j++)
  608.                     str=str2+str;*/
  609.                 msg=Class_one::Transcoder(str);
  610.                 Class_one::chiffre_Msg(mpz_t msg , mpz_t msg  ,  mpz_t e  , mpz_t n );
  611.                 str=Class_one::DeTranscoder(msg);
  612.                 for(j=str.length();j<this->tailleBloc_; j++)
  613.                         fputc((int)0, f2);
  614.                 for(j=0;j<str.length(); j++)
  615.                         fputc((int)str[j], f2);
  616.             }
  617.             fclose(f1);
  618.             fclose(f2);
  619.            
  620.     break ;
  621.     }
  622.     // liberer les variables locales
  623.     mpz_clear(p); mpz_clear(q);
  624.     mpz_clear(e);mpz_clear(phi);mpz_clear(n);
  625.     mpz_clear(message);mpz_clear( msg_chiffre);
  626.  
  627.  
  628. }
  629. int main (){
  630.     void Cryptage::crypter_RSA();
  631.  
  632.  
  633. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement