Determination de clé rsa

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 943 fois - Téléchargée 36 fois

Contenu du snippet

ce code permet de déterminer des valeurs de N ainsi que des clefs publiques et privées adaptées.
vous pouvez utiliser ce code afin d'obtenir des clefs pour l'autre source que j'ai mis sur ce site :
cryptage a clé publique

Source / Exemple :


#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int verif_premier (unsigned long int data);

void main()
    {
    int i=1,a=1,b=1,c=1,k=0;
    unsigned long int n,nb1,nb2,nb3,ea,da,phin,tmp2;
    double tmp1;
    while(a==1)
               {
               printf("\ntaper un premier nombre premier :");
               scanf("%ld",&nb1);
               a=verif_premier(nb1);
               }
    while(b==1)
               {
               printf("\ntaper un deuxieme nombre premier :");
               scanf("%ld",&nb2);
               b=verif_premier(nb2);
               }
    while(c==1)
               {
               printf("\ntaper un troixieme nombre premier :");
               scanf("%ld",&nb3);
               c=verif_premier(nb3);
               }
    n = nb1*nb2*nb3;
    phin = (nb1-1)*(nb2-1)*(nb3-1);
    printf("\nphin est : %ld",phin);
    printf("\n\ntaper EA premier avec phin:");
    while(i==1)
               {
               scanf("%ld",&ea);
               if(phin % ea == 0)
                      {i=1;printf("\nEA n'est pas premier avec phin, tapez un autre ea :");}
               else   {i=0;}
               }
    for(k=1;k<phin;k++)
               {
               tmp1 = ((1+(k*phin*1.0))/ea) ;
               tmp2 = (unsigned long int) tmp1;
               if ((tmp1-tmp2)==0)
                  {break;}
               }
    da = tmp2;
    //printf("\nN est : %ld, phin est : %ld, Ea est : %ld, Da est : %ld, k est : %d  \n\n",n,phin,ea,da,k);
    printf("\n N est : %ld, Ea est : %ld, Da est : %ld\n\n",n,ea,da);
    system("PAUSE");

    }

int verif_premier (unsigned long int data)
    {
    double tmp;
    unsigned long int tmp2;
    int val;
    for(int j=2;j<data;j++)
            {
            tmp = ((data*1.0)/j);
            tmp2 = (unsigned long int) tmp;
            if ((tmp-tmp2)==0)
               {
               val=1;
               printf("ce nombre n'est pas premier!");
               break;
               }
            else {val=0;}
            }
    return (val);
    }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
pour la boucle de 2 a la racine carrée, vous n'avez pas besoin de la librairie math.h
de 2 a racine de b
for (a=2, a*a<b+1; a++){
if (b%a==0){
nombre qui n'est pas premier
}
}
Messages postés
94
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
27 juin 2006

c vrai, ce code n'est pas idéal, mais je l'ai tapé en vitesse car j'en avais besoin.
....
Messages postés
47
Date d'inscription
mardi 1 octobre 2002
Statut
Membre
Dernière intervention
3 juin 2003

pour tester la primalité.
Ton code regarde tout d'abord s'il est divisible par deux (donc s'il est pair). Si la boucle continue, c'est qu'il ne l'est pas, donc il ne peut etre divisible par aucun nombre pair (tu testes pourtant tous les nombes inférieurs a data).
Personnellement à la place de j++, je mettrais j==2?j++:j+=2;

Voila
julien
Messages postés
269
Date d'inscription
mercredi 24 avril 2002
Statut
Membre
Dernière intervention
9 juin 2003

salut,
Juste quelques conseils pour améliorer le code :
-Pour tester la primalité de ton nombre (data), il suffit de tester les division de 2 à racine de data inclus. (#include <math.h>, sqrt(data) );
- je vois que pour convertir data en float, tu multiplies par 1.0. tu peux faire static_cast<float> (data) pour la convertir en float le temps de la division.
- Au lieu de diviser en float, puis de reconvertir en long, il vaut mieux faire le test :
if (data % j ==0) {
val=1;
printf("..");
break;
}
- En C++, utiliser le type bool (false ou true) rend le prgm plus clair (je pense pour la valeur de retour de verif_premier).
raph

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Sensei01)