Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRYPTAGE A CLÉ PUBLIQUE


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Initié Date de création : 22/02/2003 Date de mise à jour : 23/02/2003 10:48:57 Vu : 5 835

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

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

  • #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;}
  • }
  • }
#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
 

Commentaires et avis

signaler à un administrateur
Commentaire de chmod777 le 22/02/2003 15:25:02

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

signaler à un administrateur
Commentaire de Galett le 22/02/2003 18:08:43

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"

signaler à un administrateur
Commentaire de Sensei01 le 23/02/2003 00:23:51

g deja fait un utilitaire qui permet de calculer les différente clefs, mais g ne l'ai pas encore mis sur ce site

signaler à un administrateur
Commentaire de AngeloVivaldi le 10/12/2003 23:38:16

Je sais pas mais j'arrive pa a comprendre le code, comment tu fais pour chiffrer , et sur des blocs de combien ?

signaler à un administrateur
Commentaire de liv le 08/06/2004 14:58:59

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?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.