Crypt-o-matic "darkchocolate"

Soyez le premier à donner votre avis sur cette source.

Vue 3 860 fois - Téléchargée 325 fois

Description

Chiffrement de fichiers textes lettre par lettre. Plusieurs algorithmes sont utilisés. La sécurité produite est inadaptée à un usage autre que personnel.

Source / Exemple :


/*=============================================================*\
|| Crypt-o-matic v1.2 "DarkChocolate", GAUTHIER Francois, 2009 ||
||=============================================================||
||                                                             ||
||                Automated Data Encryption Tool               || 
||         (Do not provide real security, use it for fun)      ||
\*=============================================================*/

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

//==================================================================// "Be positive!" fonction

void bePlus(long *g)
{

  • g=*g*-1;
} //==================================================================// Encoding fonction void fct(char *p, unsigned long *k, unsigned long *l) { long sort=0; unsigned long gap=0; //----------------------------------------------------// Selection tool sort = lrand48()%1000000+random()%10000; // "Randomly" select the encoding method if (sort<0) { bePlus(&sort); // Sort is always positive } //----------------------------------------------------// The methods if (sort%2==0 || sort%37==0 || sort%937==0 || sort%379==0 || sort%383==0 || sort%389==0 || sort%397==0 || sort%401==0 || sort%409==0 || sort%449==0 || sort%457==0) { gap=lrand48()-*k-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%3==0 || sort%41==0 || sort%941==0 || sort%751==0 || sort%757==0 || sort%419==0 || sort%421==0 || sort%431==0 || sort%433==0 || sort%439==0 || sort%443==0) { gap=random()-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%5==0 || sort%43==0 || sort%947==0 || sort%461==0 || sort%463==0 || sort%467==0 || sort%479==0 || sort%487==0 || sort%491==0 || sort%499==0 || sort%503==0 || sort%509==0) { gap=lrand48()-rand()+*k-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%7==0 || sort%47==0 || sort%953==0 || sort%263==0 || sort%269==0 || sort%271==0 || sort%277==0 || sort%281==0 || sort%283==0) { gap=random()-rand()-*k; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%11==0 || sort%53==0 || sort%967==0 || sort%563==0 || sort%569==0 || sort%571==0 || sort%577==0 || sort%587==0 || sort%593==0 || sort%599==0 || sort%601) { gap=lrand48()-random()-*k+*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%13==0 || sort%59==0 || sort%971==0 || sort%907==0 || sort%911==0 || sort%919==0 || sort%929==0) { gap=lrand48()-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%17==0 || sort%61==0 || sort%977==0 || sort%701==0 || sort%709==0 || sort%719==0 || sort%727==0 || sort%733==0 || sort%739==0 || sort%743==0) { gap=lrand48()-*k-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%19==0 || sort%67==0 || sort%983==0 || sort%823==0 || sort%827==0 || sort%829==0 || sort%839==0 || sort%853==0 || sort%857==0) { gap=rand()+*k; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%23==0 || sort%71==0 || sort%991==0 || sort%809==0 || sort%811==0 || sort%821==0) { gap=random()+*k+*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%29==0 || sort%73==0 || sort%997==0 || sort%773==0 || sort%787==0 || sort%797==0) { gap=rand()-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%31==0 || sort%79==0 || sort%1009==0 || sort%761==0 || sort%769==0) { gap=rand()+*l-*k; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%83==0 || sort%89==0 || sort%97==0 || sort%331==0 || sort%337==0 || sort%347==0 || sort%349==0 || sort%353==0 || sort%359==0 || sort%367==0 || sort%373==0) { gap=random()-rand()+*k; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if(sort%101==0 || sort%103==0 || sort%107==0 || sort%229==0 || sort%233==0 || sort%239==0 || sort%241==0 || sort%251==0 || sort%257==0 || sort%293==0 || sort%307==0 || sort%311==0 || sort%313==0 || sort%317==0) { gap=lrand48()-random()+*k-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%109==0 || sort%113==0 || sort%127==0 || sort%659==0 || sort%661==0 || sort%673==0 || sort%677==0 || sort%683==0 || sort%691==0) { gap=(*k)-*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%131==0 || sort%137==0 || sort%139==0 || sort%859==0 || sort%863==0 || sort%877==0 || sort%881==0 || sort%883==0 || sort%887==0) { gap=*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%149==0 || sort%151==0 || sort%157==0 || sort%461==0 || sort%463==0 || sort%467==0 || sort%479==0 || sort%487==0 || sort%491==0 || sort%499==0 || sort%503==0) { gap=*l+*k; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%163==0 || sort%167==0 || sort%173==0 || sort%643==0 || sort%647==0 || sort%653==0) { gap=*k*(*l); if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%179==0 || sort%181==0 || sort%191==0 || sort%607==0 || sort%613==0 || sort%617==0) { gap=*k+2; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%193==0 || sort%197==0 || sort%199==0 || sort%509==0 || sort%521==0 || sort%523==0 || sort%541==0 || sort%547==0 || sort%557==0) { gap=rand()+*k+*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} if (sort%211==0 || sort%223==0 || sort%227==0 || sort%619==0 || sort%631==0 || sort%641==0) { gap=random()+*k+*l; if(gap<0) { bePlus(&gap); }
  • p=*p+gap;
} } //=============================================================// Decoding fonction void dfct(int *q, unsigned long *e, unsigned long *o) { long sort=0; unsigned long gap=0; //----------------------------------------------------// Selection tool sort = lrand48()%1000000+random()%10000; // "Randomly" select the decoding method (Laughts are not allowed.) if (sort<0) { bePlus(&sort); // Sort is always positive } //----------------------------------------------------// The methods if (sort%2==0 || sort%37==0 || sort%937==0 || sort%379==0 || sort%383==0 || sort%389==0 || sort%397==0 || sort%401==0 || sort%409==0 || sort%449==0 || sort%457==0) { gap=lrand48()-*e-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%3==0 || sort%41==0 || sort%941==0 || sort%751==0 || sort%757==0 || sort%419==0 || sort%421==0 || sort%431==0 || sort%433==0 || sort%439==0 || sort%443==0) { gap=random()-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%5==0 || sort%43==0 || sort%947==0 || sort%461==0 || sort%463==0 || sort%467==0 || sort%479==0 || sort%487==0 || sort%491==0 || sort%499==0 || sort%503==0 || sort%509==0) { gap=lrand48()-rand()+*e-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%7==0 || sort%47==0 || sort%953==0 || sort%263==0 || sort%269==0 || sort%271==0 || sort%277==0 || sort%281==0 || sort%283==0) { gap=random()-rand()-*e; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%11==0 || sort%53==0 || sort%967==0 || sort%563==0 || sort%569==0 || sort%571==0 || sort%577==0 || sort%587==0 || sort%593==0 || sort%599==0 || sort%601) { gap=lrand48()-random()-*e+*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%13==0 || sort%59==0 || sort%971==0 || sort%907==0 || sort%911==0 || sort%919==0 || sort%929==0) { gap=lrand48()-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%17==0 || sort%61==0 || sort%977==0 || sort%701==0 || sort%709==0 || sort%719==0 || sort%727==0 || sort%733==0 || sort%739==0 || sort%743==0) { gap=lrand48()-*e-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%19==0 || sort%67==0 || sort%983==0 || sort%823==0 || sort%827==0 || sort%829==0 || sort%839==0 || sort%853==0 || sort%857==0) { gap=rand()+*e; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%23==0 || sort%71==0 || sort%991==0 || sort%809==0 || sort%811==0 || sort%821==0) { gap=random()+*e+*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%29==0 || sort%73==0 || sort%997==0 || sort%773==0 || sort%787==0 || sort%797==0) { gap=rand()-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%31==0 || sort%79==0 || sort%1009==0 || sort%761==0 || sort%769==0) { gap=rand()+*o-*e; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%83==0 || sort%89==0 || sort%97==0 || sort%331==0 || sort%337==0 || sort%347==0 || sort%349==0 || sort%353==0 || sort%359==0 || sort%367==0 || sort%373==0) { gap=random()-rand()+*e; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if(sort%101==0 || sort%103==0 || sort%107==0 || sort%229==0 || sort%233==0 || sort%239==0 || sort%241==0 || sort%251==0 || sort%257==0 || sort%293==0 || sort%307==0 || sort%311==0 || sort%313==0 || sort%317==0) { gap=lrand48()-random()+*e-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%109==0 || sort%113==0 || sort%127==0 || sort%659==0 || sort%661==0 || sort%673==0 || sort%677==0 || sort%683==0 || sort%691==0) { gap=(*e)-*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%131==0 || sort%137==0 || sort%139==0 || sort%859==0 || sort%863==0 || sort%877==0 || sort%881==0 || sort%883==0 || sort%887==0) { gap=*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%149==0 || sort%151==0 || sort%157==0 || sort%461==0 || sort%463==0 || sort%467==0 || sort%479==0 || sort%487==0 || sort%491==0 || sort%499==0 || sort%503==0) { gap=*o+*e; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%163==0 || sort%167==0 || sort%173==0 || sort%643==0 || sort%647==0 || sort%653==0) { gap=*e*(*o); if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%179==0 || sort%181==0 || sort%191==0 || sort%607==0 || sort%613==0 || sort%617==0) { gap=*e+2; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%193==0 || sort%197==0 || sort%199==0 || sort%509==0 || sort%521==0 || sort%523==0 || sort%541==0 || sort%547==0 || sort%557==0) { gap=rand()+*e+*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} if (sort%211==0 || sort%223==0 || sort%227==0 || sort%619==0 || sort%631==0 || sort%641==0) { gap=random()+*e+*o; if(gap<0) { bePlus(&gap); }
  • q=*q-gap;
} } //=============================================================// MAIN FONCTION int main (int argc, const char * argv[]) { char c; // Encoded variable int x=0; // Peanut variable int f=0, cont=1; // Option variable -- Continue variable int d=0; // Decoded variable char n_source[100]; // Source file name char n_dest[100]; // Destination file name unsigned long accessCode=0; // Access code variable unsigned long loop=0; // Scores loops while(cont!=0) { puts("\n== Welcome to Crypt-o-Matic (v1.2 DarkChocolate)! Do you want to encode a file (1) or decode a file(2)?\n== Pls type 1 or 2 and press ENTER"); scanf("%d", &f); srandom(2); srand48(2); // Random fonctions resets srand(3); loop=0; //---------------------------------------------------------------------// Encoding or Decoding options if(f==1) { puts("== Access code generated: ** USER'S RESPONSABILITY TO USE ANY APPROPRIATE MEANS TO REMEMBER IT AND KEEP IT SECRET **"); printf("== ------- access code ----->> %ld", accessCode=time(0)); puts("\n== File to encode? (eventually including directory):"); } if(f==2) { puts("======== WARNING: INCORRECT ENTRY MAY RESULT IN PERMANENT DATA LOSS!! ========="); puts("== Enter your access code:"); puts("== (Pls verify)."); scanf("%ld", &accessCode); puts("== Access granted."); puts("\n== File to decode? (eventually including directory):"); } scanf("%100s", &n_source); FILE* stream=fopen(n_source, "r"); //--------------------------------------------// Pointer return NULL on n_source if(stream==NULL) { exit(puts("\n== FILE NOT FOUND\n== ***\tPlease verify file's name.***")); } //-------------------------------------------// puts("\n== Destination file?"); scanf("%100s", &n_dest); FILE* stream2=fopen(n_dest, "w"); puts("== Proceeding... Please wait..."); //--------------------------------------------------------------------// Encoding and Decoding calls and files writing if(f==1) { char x1='P'; x1+=1; printf("== 'P'= %c", x1); fprintf(stream2, "%c", x1); while (c=fgetc(stream), c!=EOF) { loop++; fct(&c, &accessCode, &loop); fprintf(stream2, "%c", c); } } if(f==2) { char x1=fgetc(stream); x1-=1; printf("== %c", x1); if(x1=='P') { while (d=fgetc(stream), d!=EOF) { loop++; dfct(&d, &accessCode, &loop); fprintf(stream2, "%c", d); } } else { puts("Decoding status.... FAILED"); return EXIT_FAILURE; } puts("== Decoding status.... ok!"); remove(n_source); if(remove(n_source)) { puts("== Deleting source file..... ok!"); } else { puts("== Unable to delete source file!\n== Deleting target file."); remove(n_dest); if(remove(n_dest)) { puts("== Target file deleted."); } else { puts("== Unable to delete target file!\n"); } } } fclose(stream); fclose(stream2); puts("== Exit status......ok!"); puts("\n\n== Press 1 and ENTER to use again.\n== Press 0 and ENTER to exit"); scanf("%d", &cont); if (cont==0) { break; } } return 0; } //=============================================// //============ END OF SOURCE CODE =============// //=============================================//

Conclusion :


J'en ai fait plusieurs versions, celle ci est la plus "aléatoirement chiffrée". Elle se nomme DarkChocolate.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
20
Date d'inscription
vendredi 23 septembre 2005
Statut
Membre
Dernière intervention
10 juin 2010

Moi je mets 10, c'est original de créer 'sa' méthode de chiffrement !
Messages postés
21
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
20 mai 2011

J'aurai aimé que le site permette de classer différemment C et C++. Mon code est en C.

The lrand48() and nrand48() functions return values of type long in the range [0, 2**31-1]. The high-order (31) bits of r(n+1) are loaded into the lower bits of the returned value, with the topmost (sign) bit set to zero.

-----> dixit sous Unix cmd: man lrand48.

Il n'y a en fait *normalement* pas de problème de valeur négative avec lrand48. Si cependant cela se produit, se serai très mal pour la suite du programme. La fonction bePlus ne mange pas beaucoup de pain, et on sait jamais. Il est bon de ssavoir que les fonctions "pseudo ramdomisés" se répètes si elle sont réinitialisée a l'identique, ce qui est -un avantage si on a besoin de répété la même séquence (décrypter) -un inconvénient car cela les rends prévisibles.

Je vais schématiser le déroulement du programme: la clé fournie l'est sur une simple interprétation de time(), parceque le calendrier ne boucle pas trop souvent. Un même fichier, codé a 1 seconde d'intervale, donne un cryptage different. Il faut noter la clé pour pouvoir décrypter le fichier. Si on utilise une mauvaise clé dans lors du décryptage, le fichier est crypté est recrypté sur la nouvelle clé (et là bon courage...).
Le programme est prévu pour des fichiers textes. Chaque "signe" du fichier est crypté (pas seulement les lettres) sur l'éventail des fonctions de codage. Elles utilisent toutes des fonctions standards "pseudo randomisés", qui, pour être moins prévisibles, sont utilisées avec d'autres variables, comme la clé de cryptage, la valeur du caractère considéré, sa place relative dans le fichier.

Je l'ai testé sous Mac OSx (sans problème, cela devrai fonctionner aussi sous Linux) et sous windows Vista (il faut faire une légère adaptation du code pour que le programme lise le fichier jusqu'à la fin).

Toutes questions, remarques, critiques sont les bienvenues!
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
1) Attention, ta méthode de sélection "d'algorithme" n'est peut-être pas tout à fait aléatoire. En effet, en prenant la valeur absolue du résultat, tu donnes (peut-être) des chances supplémentaires à certains nombres. Par exemple, si on définit un générateur pseudo-aléatoire entre -2 et 4 tel que tu l'utilises, alors on peut tirer les nombres 0 (1/6 probabilité), 1 (1/3 probabilité), 2 (1/3 probabilité), 3(1/6), et 4(1/6). Si tu veux utiliser la valeur absolue, il faut que le générateur ait des limites de même distance de zéro (exemple -2 et 2, 8 et -8 ...) (c'est pour ça que je dis "peut-être", car je ne sais pas si en C++ et tel que tu l'appelles dans ton code, c'est le cas).

2) Je ne suis pas sûr qu'un tel algorithme soit utile en pratique (même pour un usage perso), pour une raison principale : une méthode de chiffrement doit être déterministe. Dans ton cas, il faut clairement distinguer la génération de la clef "aléatoire" de la routine de chiffrement, et plutôt de proposer à l'utilisateur de proposer une clef qu'il a choisie lui-même (une même clef donne un même chiffrement pour une même donnée). Dans ton cas, je ne suis pas trop sûr de comprendre (je ne pratique pas le C++), mais il semblerait que tu tires des clefs aléatoires pour l'encodage ET pour le décodage. En gros, en appellant à la suite tes deux fonctions, on pourrait encrypter avec la clef "12" et décrypter avec la clef "3384" ... à moins que la clef "générée" ne modifie pas l'algorithme (mais quel intérêt alors), je ne comprends pas trop ces pratiques ...

Cordialement, Bacterius !

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.