- /***********************************************************/
- /* UDL, facultee des sciences, departement d'informatique */
- /* El Antri Abdellah */
- /* Email:El_emir_2002@yahoo.fr */
- /* Ces programmes sont sous licence GNU */
- /* Compiler avec tc++ 3 sous dos, win */
- /***********************************************************/
-
- ///////////////////////////////////////////////////////////////////////////////
- //Tout vos questions, propositions seront les bien venu. //
- /////////////////////////////////////////////////////////////////////////////
-
- /*Ce programme va vous poposer une cle secrete et une cle public*/
- /* pour utiliser l'algorithme de cryptage RSA. */
- /* Les algorithmes utiliser sont directe, */
- /* c.a.d ils ne sont pas concu sur une */
- /* base mathematique evolue */
-
- #include<stdio.h>
- #include<stdlib.h>
-
- void main()
- {
- unsigned long int existe ;
- unsigned long int e, d, ed ;
- unsigned long int p, q, fct_euler, tab_e[5*1024];
- unsigned long int i, rest, l, b, m, r ;
- char c ;
-
- printf("\n Ce programme va vous generez une cle secrete pour l'algorithme RSA ") ;
- printf("\n Donner p : ") ;
- scanf("%ld", &p) ;
- printf(" Donner q : ") ;
- scanf("%ld", &q) ;
-
- /* Calcul de e */
- m = 0 ; // index du tab_e
- e = 3 ;
- existe = 0 ; // aucun e trouve pour l'instatnt
- fct_euler = (p - 1) * (q - 1);
- printf("Les nbres premier avec %ld:", fct_euler);
- getch();
- do
- {
- b = 1 ;
- while( b & e < fct_euler)
- {
- i = fct_euler ;
- l = e ;
- do{ // algo d'euclide pour calculer pgcd(e, nbr_euler)
- rest = i % l ;
- i = l ;
- l = rest ;
- }while (rest > 1);
- if (rest == 0) e = e + 2;// e courant est un diviseur de fct_euler,
- // on ne va pas le prendre
- else b = 0;// On va casser la boucle pour enregistre e ds tab_e
- }
- if ( ! b) // e >= fct_euler
- {
- existe = 1;
- printf("\n%ld", e);
- tab_e[m] = e;
- m=m+1 ;
- m = m%(5*1024); // Pour ne pas depasser la taille du tableau,
- // donc seul les 5*1024 valeurs seront sauvgarder.
- e = e + 2;
- }
- else if(! existe) //On a sortit avec e > fct_euler
- {
- printf("\nImpossible d'obtenir e ") ;
- exit(1) ;
- } else break;
- } while(1) ;
- randomize();
- e = tab_e[random(m)];
- /* calcul de d */
- // nous avons ed est premier avec fct_euler
- // ed = 1 + k*fct_euler
- // d = ed / e
- // donc il faut chercher ed multiple de e
-
- ed = 1;
- do
- {
- ed = ed + (p-1)*(q-1);
- r = ed % e ;
- }while (r != 0); // On est sur que d existe. donc la boucle doit termine sur r = 1
- d = ed / e;
- // en va choisir parmi les 4*1024 valeurs possible de e une seul au hasard
- printf("\n\t *Cle prive propose est :%ld* ",e ) ;
- printf("\n\t *Cle publuc(d) propose est : %ld*", d);
- getch();
- }
/***********************************************************/
/* UDL, facultee des sciences, departement d'informatique */
/* El Antri Abdellah */
/* Email:El_emir_2002@yahoo.fr */
/* Ces programmes sont sous licence GNU */
/* Compiler avec tc++ 3 sous dos, win */
/***********************************************************/
///////////////////////////////////////////////////////////////////////////////
//Tout vos questions, propositions seront les bien venu. //
/////////////////////////////////////////////////////////////////////////////
/*Ce programme va vous poposer une cle secrete et une cle public*/
/* pour utiliser l'algorithme de cryptage RSA. */
/* Les algorithmes utiliser sont directe, */
/* c.a.d ils ne sont pas concu sur une */
/* base mathematique evolue */
#include<stdio.h>
#include<stdlib.h>
void main()
{
unsigned long int existe ;
unsigned long int e, d, ed ;
unsigned long int p, q, fct_euler, tab_e[5*1024];
unsigned long int i, rest, l, b, m, r ;
char c ;
printf("\n Ce programme va vous generez une cle secrete pour l'algorithme RSA ") ;
printf("\n Donner p : ") ;
scanf("%ld", &p) ;
printf(" Donner q : ") ;
scanf("%ld", &q) ;
/* Calcul de e */
m = 0 ; // index du tab_e
e = 3 ;
existe = 0 ; // aucun e trouve pour l'instatnt
fct_euler = (p - 1) * (q - 1);
printf("Les nbres premier avec %ld:", fct_euler);
getch();
do
{
b = 1 ;
while( b & e < fct_euler)
{
i = fct_euler ;
l = e ;
do{ // algo d'euclide pour calculer pgcd(e, nbr_euler)
rest = i % l ;
i = l ;
l = rest ;
}while (rest > 1);
if (rest == 0) e = e + 2;// e courant est un diviseur de fct_euler,
// on ne va pas le prendre
else b = 0;// On va casser la boucle pour enregistre e ds tab_e
}
if ( ! b) // e >= fct_euler
{
existe = 1;
printf("\n%ld", e);
tab_e[m] = e;
m=m+1 ;
m = m%(5*1024); // Pour ne pas depasser la taille du tableau,
// donc seul les 5*1024 valeurs seront sauvgarder.
e = e + 2;
}
else if(! existe) //On a sortit avec e > fct_euler
{
printf("\nImpossible d'obtenir e ") ;
exit(1) ;
} else break;
} while(1) ;
randomize();
e = tab_e[random(m)];
/* calcul de d */
// nous avons ed est premier avec fct_euler
// ed = 1 + k*fct_euler
// d = ed / e
// donc il faut chercher ed multiple de e
ed = 1;
do
{
ed = ed + (p-1)*(q-1);
r = ed % e ;
}while (r != 0); // On est sur que d existe. donc la boucle doit termine sur r = 1
d = ed / e;
// en va choisir parmi les 4*1024 valeurs possible de e une seul au hasard
printf("\n\t *Cle prive propose est :%ld* ",e ) ;
printf("\n\t *Cle publuc(d) propose est : %ld*", d);
getch();
}