Algorithme de cryptage/decryptage

Soyez le premier à donner votre avis sur cette source.

Vue 19 064 fois - Téléchargée 2 445 fois

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

Ajouter un commentaire

Commentaires

besilent
Messages postés
4
Date d'inscription
jeudi 18 février 2010
Statut
Membre
Dernière intervention
10 mars 2010
3
Je ne l'ai pas précisé mais il est vrai que cet algorithme était destiné pour crypter des fichiers textes simples, pour des données personnelles notamment que l'on souhaiterait rendre un peu moins lisible.
Il est vrai que si le but finale était de le réutiliser pour crypter des communications et des envois d'informations sur internet, s'inspirer du cryptage RSA avec clé publique/privée semble être bien plus sur.
En attendant, je pense que pour un utilisateur lambda cela reste quand même compliqué de cracker cet algorithme. Évidemment pour des personnes averties, je suppose que cela reste assez simples mais ne connaissant pas vraiment les méthodes je ne serais juger sur l'efficacité de cet algorithme.
Je connais dans le principe RSA, je regarderai un peu plus en profondeur voir ce que je peux faire.

Sinon sur la présentation du code, les commentaires et le respect des "normes", qu'en avez vous pensez ?

Merci
LeFauve42
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Il manque peut-etre une notion de "cle" dans ton algo, pour qu'il puisse etre utilise.
Peut-etre qu'au lieu de creer la trame aleatoirement, tu pourrais la construire a partir d'une cle entree par l'utilisateur.
Du coup, tu ne la sauve plus dans le fichier crypte, mais tu la recree lors du decodage apres que l'utilisateur ai rentre sa cle.

Eric

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.