Calcul de clés simples RSA

cs_Adrien95 Messages postés 2 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 7 novembre 2007 - 7 nov. 2007 à 01:07
cs_Adrien95 Messages postés 2 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 7 novembre 2007 - 7 nov. 2007 à 01:09

1 réponse

cs_Adrien95 Messages postés 2 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 7 novembre 2007
7 nov. 2007 à 01:09
Bizzare mon message est vide. Le voici :

--------------------------------------------------------------

Bonjour,

Je sollicite votre aide après plusieurs heures de pertes capillaires.

Je ne suis pas très très bon en maths, donc ça n'arrange rien, mais j'essaye de faire un effort :)

A des fins éducatives, il me faut dans un premier temps implémenter un cryptage pour le moins basique avec de petits chiffres.

Ci-dessous mon main :

int main()
{
    srand(time(NULL)) ; // Initialise la randomization pour la fonction rand()

    int p , q , e, n, d, i=0 , j=0 ,ok=0, euler;
   
    while(ok==0)
    {
        while(i!=1)
        {       
            p=gen_entier() ;          
            i=premier(p) ;         
        }

        while(j!=1)
        {       
            q=gen_entier() ;
            j=premier(q) ;         
        }

        n = (p*q) ;
        euler = ((p - 1) * (q - 1)) ;
       
        e=gen_entier() ;
        d=gen_entier() ;

        if ((pgcd(e, euler) 1) && ((d * e)%n 1))
        {
            ok=1;
        }       
        else
        {
            ok=0;
        }
    }
 
    printf("%d\n%d\n%d\n%d\n%d\n%d\n", p, q, n, euler, e, d) ;
    return 0 ;
}


Jusqu'à l'indicatrice d'Euler, je ne dois pas être dans le faux. Pour "e" et "d" c'est une autre histoire.

Voici les fonctions liées :

int gen_entier()
{
    int alea = rand()%11 ;
    return alea ;
}

int premier (int n)
{
    int i, pas_premier = 0 ;
   
    // 0 et 1 ne peuvent pas être premiers   
    if (n < 2)
    {
        return 0 ;
    }   
    else
    {
        for(i = 2 ; i <= (n/2) ; i++)
        {

            if (n / i ((n % i) + (n/i)) || n % 2 0)
            {
                pas_premier = 1 ;
                break ;
            }
        }

        if(pas_premier)
        {
            return 0 ;
        }
        else
        {
            return 1 ;
        }
    }
}

int pgcd(int m, int n)
{
    if (n == 0)
    {
        return m ;
    }
    else
    {
        return pgcd(n, m%n) ;
    }
}


Dans les indications que l'on m'a fourni, "e" doit être premier avec l'indicatrice d'Euler, d'où mon PGCD.

Par ailleurs pour le "d", les tests que j'ai fait me laissent très perplexe. J'ai du passer quoi qu'il arrive à côté d'un truc.

Si vous pouviez m'éclairer !

Merci d'avance.
0
Rejoignez-nous