Cryptage a clé publique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 364 fois - Téléchargée 36 fois

Contenu du snippet

c'est un programme de cryptage et décryptage (de base) à clé publique:
vous tapez N, la clé publique, la clé privé, et vous tapez votre message.
ce prog crypte et décrypte automatiquement.
amélioration a apporter :
séparer le cryptage et le décryptage, pouvoir importer des fichier.

Source / Exemple :


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

#define TAILLE 3000
#define CRYPT 0
#define DECRYPT 1

void calcul_reste(unsigned long int puiss,int cod);

char mess[TAILLE],decryptage[TAILLE];
unsigned long int longmess,cryptage[TAILLE],N,Ea,Da;

void main(void)
     {
     // saisie du message :
     printf("\ntaper le message :");
     gets(mess);
     longmess = strlen(mess);

     //saisie des clés de codage :
     printf("\non propose : N=105,Ea=29,Da=5 ou : N=56461,Ea=5389,Da=12209\n");
     printf("\nentrez N :");
     scanf("%ld",&N);
     printf("\nentrez EA :");
     scanf("%ld",&Ea);
     printf("\nentrez Da :");
     scanf("%ld",&Da);

     // cryptage :
     calcul_reste(Ea,CRYPT);
     printf("\nle message crypte est :\n");
     for(int i=0; i<longmess; i++)
             printf("%d ",cryptage[i]);

     // décryptage :
     calcul_reste(Da,DECRYPT);
     printf("\nle message decrypte est :\n");
     for(int i=0; i<longmess; i++)
             printf("%c",decryptage[i]);

     printf("\n\n");
     system("PAUSE"); // ne sert que sous le logiciel DEV-C++ afin d'avoir
                      // le temps de voir ce qui s'affiche
     }

void calcul_reste(unsigned long int puiss,int cod)
     {
     unsigned long int reste,tmp,data;
     for(int i=0; i<longmess; i++)
             {
             //cod=0 si l'on crypte et cod=1 si l'on decrypte
             if(cod==0)data=(unsigned long int)mess[i];
             if(cod==1)data=cryptage[i];
             tmp=1;
             for(int j=0; j<puiss; j++)
                     {
                     tmp = data * tmp;
                     tmp = (unsigned long int)fmod (tmp, N);
                     }
             reste=tmp;
             if(cod==0){cryptage[i]=reste;}
             if(cod==1){decryptage[i]=(char)reste;}
             }
     }

Conclusion :


g également fait prog qui ermet de créer N, une clé publique et une clé privé.
cette source est désormais disponible sur ce site sous le nom :
determination de clé RSA

A voir également

Ajouter un commentaire

Commentaires

Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

Salut,

Sympa ton programme mais j'ai un petit problème avec le décryptage...l'affichage ne correspond pas à la chaîne initialement entrée...
As tu une idée?
Messages postés
60
Date d'inscription
dimanche 8 décembre 2002
Statut
Membre
Dernière intervention
1 juillet 2004

Je sais pas mais j'arrive pa a comprendre le code, comment tu fais pour chiffrer , et sur des blocs de combien ?
Messages postés
94
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
27 juin 2006

g deja fait un utilitaire qui permet de calculer les différente clefs, mais g ne l'ai pas encore mis sur ce site
Messages postés
115
Date d'inscription
jeudi 7 février 2002
Statut
Membre
Dernière intervention
21 mai 2005

petite remarque qui ne change rien au code:
system("PAUSE"); // ne sert que sous le logiciel DEV-C++ ...
en fait ça fonctionne sur tous compilateurs windows puisque cela appel la routine système "pause"
Messages postés
46
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
2 décembre 2006

bon code mais tu devrait réaliser les utilitaires qui donnent les différentes clefs (difficiles a calculer).........

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)