Algorithme de cryptage/decryptage

Description

Bonjour,

Un jour, je m'ennuyais en cours de uC, comme très souvent en fait. Et j'ai pensé à un algorithme de cryptage, je suis loin de prétendre qu'il est super puissant ou autre mais voilà, je partage pour ceux que cela pourrait intéresser.

Voici un exemple de cryptage de la chaine :

"Bonjour, !

Voici une source qui présente un algorithme de cryptage.

Bien le bonsoir !"

Le cryptage donne :

0709141606100409040008070919010517091217160409010309121214090413100104181713081306010504010016070908171005131315030109090917070210131102131114030512111918010007011511161612050702100302111310151515021601010519141103161812011616150417080614101614010402140011031011150607160319070312001318111706121500191807160503071716030817081911080511010315071907060211170719121702021709141700090312161919060200021213190119050514100902001712190307160006040102150202121815131415110505151315121214091217121206010418051402140602190719071015121217090610170902140601140904000214171312120601041806100400021410010601170902140413041806071713040014090813040002140601140902140709090109191212041817090813010503090400021404090400021406100418090804130813070909190400190502141907190713151709040014090214090104000214141612121409171312121709041802140602

Il y a deux programmes. Un pour crypter l'autre pour décrypter. J'aurais pu les mettre dans un même programme mais bon, il aurait fallu faire un menu et ce n'était pas le but. Libre à ceux qui souhaitent reprendre la source de la modifier à leur sauce.

Toujours est-il qu'il y a donc deux fonctions fcrypter et f decryptage dont les prototypes sont les suivants :

- void fcrypter ( char *entree, char *sortie );
+ entree correspond au chemin du fichier contenant le texte à crypter
+ sortir correspond au chemin du fichier contenant le resultat du cryptage
- void fdecryptage ( char *entree, char *sortie );
+ entree correspond au chemin du fichier contenant le resultat du cryptage
+ sortir correspond au chemin du fichier contenant le resultat du décryptage

Quoiqu'il en soit voici dans les grandes lignes la méthode de cryptage.

[1] On crée un tableau de caractères contenant les caractères qui seront autorisés au cryptage.
[2] On crée une matrice à 2 dimensions initialisée avec un caractère non autorisé ex : '¤'
[3] On appelle une fonction qui va générer aléatoirement des coordonnées pour chaque caractère
autorisé.
On vérifie pour valider le placement du caractère dans la matrice que la case n'est pas déjà
utilisé.
[4] On sauvegarde dans une structure les coordonnées dans la matrice pour chaque caractère.
[5] On va pouvoir généré le cryptage en sachant que le code crypté = trame + texte.
La trame correspond aux coordonnées de chaque caractère dans la matrice rangé dans l'ordre du
tableau des caractères autorisés afin de savoir comment la reconstruire pour le décryptage.
[6] Finalement, on appelle une fonction Crypter qui va chercher dans la matrice les coordonnées de
chaque caractères du texte à crypter.
[7] A l'occasion on en profite pour sauvegarder le résultat i.e la trame + texte.

Pour le décryptage et bien on fait l'inverse. J'ai commenté le code pour que ce soit compréhensible, enfin je l'espère.

Etant donné que j'ai modulé le code, j'ai quelque .c. Pour une meilleur lecture, j'ai zippé la source. Je mets le header de chaque opération i.e : cryptage/décryptage.

Source / Exemple :


/* CRYPTAGE */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M_SIZE 20

typedef struct
{
        char c;
        int x;
        int y;
} BDD;

void SauvegarderCryptage( char   *CheminFichier, int  *s1     , int    taille_s1, int  *s2    , int taille_s2         );
void Initialiser_Matrice( char  **Matrice      , int   Ligne  , int    Colonne  , char  c                             );
void Desallouer_Matrice ( char  **Matrice      , int   Colonne                                                        );
void MemoriserFichier   ( char   *CheminFichier, char *Chaine                                                         );
void Allouer_Matrice    ( char ***Matrice      , int   Ligne  , int    Colonne                                        );
void Generer_Matrice    ( BDD    *bdd          , char *T      , char **M        , int  *EnTete, int i        , int *p );
void fcrypter           ( char   *entree       , char *sortie                                                         );
void Crypter            ( BDD    *bdd          , char *T      , char  *s        , int  *d     , int taille_d          );
int  LongueurFichier    ( char   *CheminFichier                                                                       );
int  DecouperEntier     ( int     x            , int  *s      , int   *i                                              );

/* DECRYPTAGE */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M_SIZE 20

typedef struct
{
        char c;
        int x;
        int y;
} BDD;

void SauvegarderDecryptage( char *CheminFichier, char *s     , int   taille_s                                          );
void MemoriserFichier     ( char *CheminFichier, char *Chaine                                                          );
int  LongueurFichier      ( char *CheminFichier                                                                        );
void ConstruireBDD        ( BDD  *bdd          , char *T     , int  *t              , int taille_t                     );
void fdecryptage          ( char *entree       , char *sortie                                                          );
void CharToInt            ( char *s            , int  *d     , int   taille_s                                          );
void Decrypter            ( BDD  *bdd          , char *T     , char *CodeIsDecrypted, int *texte    , int taille_Texte );
void Decouper             ( int  *t            , int  *s1    , int  *s2             , int  taille_s1, int taille_s2    );

Conclusion :


Dans tous les cas, il y a sûrement des imperfections dans mon code, donc je vous laisse me critiquer à votre aise et c'est bien là le but en plus de partager la source.

Merci de votre lecture et bonne continuation.

Codes Sources

A voir également

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.