From 238d2d19aaaf918cfa016ac7963ebb184d299baf Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Wed, 15 Aug 2012 00:31:30 +0200 Subject: [PATCH] Updated README (git repo & text typos). --- README.md | 206 ++++++++++++++++++++---------------------------------- 1 file changed, 74 insertions(+), 132 deletions(-) diff --git a/README.md b/README.md index e93cf4e..e354e47 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,5 @@ # CryptAfinity - 1. Description - 1. Auteurs - 2. Pre-requis - 1. Sur un systeme Debian GNU/Linux - 2. Sur un systeme Apple MacOSX (≥10.3) - 3. Sur un systeme Microsoft Windows - 3. Se procurer CryptAfinity - 4. Utiliser CryptAfinity - 1. Compilation - 2. Utilisation - 5. Documentation - 1. Code - 2. Decodeur "Afine" - 3. Decodeur "Vigenere" - ## 1. Description CryptAfinity est un logiciel libre permettant de dechiffrer des texte @@ -40,12 +25,14 @@ version de developpement si compilez le programme vous-meme): * glib-2.0 + ### 2.1. Sur un systeme Debian GNU/Linux Il vous suffit de taper (en tant qu'administrateur) les commandes suivantes pour installer le necessaire: -# apt-get install libglib-2.0-dev + # apt-get install libglib-2.0-dev + ### 2.2. Sur un systeme Apple MacOS X (>= 10.3) @@ -53,18 +40,21 @@ Il est necessaire d'avoir installe les autotools (automake, autoconf...) dans leur derniere version. À partir de la, il suffit de taper les commandes suivantes dans un terminal : -# sudo fink install glib2-dev + # sudo fink install glib2-dev + ### 2.3. Sur un systeme Microsoft Windows Cela ne fut pas (encore) teste, mais il est tres probable que cela fonctionne sous Cygwin. + ## 3. Se procurer CryptAfinity Vous pouvez telecharger la derniere archive des sources, ou bien directement la version la plus recente du projet sur le depot Subversion du projet. + ### 3.1. L'archive des sources Elle est disponible a l'adresse : @@ -72,40 +62,39 @@ Elle est disponible a l'adresse : [http://glenux2.free.fr/pub/projets/CryptAfinity/archives/](http://glenux2.fre e.fr/pub/projets/CryptAfinity/archives/) + ### 3.2. Le depot Subversion Afin d'obtenir les sources les plus a jour, vous pouvez utiliser le logiciel -de controle de sources Subversion +de controle de sources Git : -$ svn checkout http://repository.glenux.ath.cx/svn/CryptAfinity/ + $ git clone https://github.com/glenux/cryptaffinity.git -Il n'y a pas de mot de passe, il suffit donc de presser la touche "Entree" -pour l'utilisateur "anonymous", si ce dernier vous est demande. ## 4. Utiliser CryptAfinity + ### 4.1. Compilation -Commencez par decompressez l'archive. +Si vous avez téléchargé une archive, commencez par la decompressez : -$ tar -xzvf CryptAfinity-0.1.tar.gz + $ tar -xzvf CryptAfinity-0.2.tar.gz -Rendez vous ensuite dans le dossier qui vient d'etre cree lors de la +Rendez vous ensuite dans le dossier qui vient d'etre crée lors de la decompression. -$ cd CryptAfinity-0.2 + $ cd CryptAfinity-0.2 Puis lancez l'auto-configuration du logiciel, puis la compilation. -$ ./autogen - -$ ./configure - -$ make + $ ./autogen + $ ./configure + $ make Le programme sous forme binaire se trouvera alors dans le sous-dossier src/tools/, sous le nom break_afinity + ### 4.2. Utilisation CryptAfinity necessite de nombreux parametres, avec la syntaxe suivante: @@ -117,27 +106,27 @@ Ou les parametres sont les suivants: &nbs p_place_holder; -a, --alphabet -Fichier contenant les lettres de l'alphabet, dans l'ordre. +: Fichier contenant les lettres de l'alphabet, dans l'ordre. - -e, --epsilon -Tolerance pour le test des clefs. +: Tolerance pour le test des clefs. -f, --frequencies -Proportion moyenne que representent les 9 lettres "prioritaires" dans le texte +: Proportion moyenne que representent les 9 lettres "prioritaires" dans le texte clair. -k, --keylength -Taille de la clef maximul (obsolete) +: Taille de la clef maximul (obsolete) -p, --priorities -Lettres ordonnees par frequence decroissante d'apparition dans le texte clair. +: Lettres ordonnees par frequence decroissante d'apparition dans le texte clair. -t, --text -Fichier contenant le texte chiffre. +: Fichier contenant le texte chiffre. -m, --mode -Selection du mode "Afine" ou "Vigenere" +: Selection du mode "Afine" ou "Vigenere" + ## 5. Documentation @@ -151,116 +140,69 @@ doc/html de l'application, ou en suivant [ce lien](html/index.html). On genere l'espace des clefs possibles pour l'alphabet donne en entree: -int alpha_size; //taille de l'alphabet + int alpha_size; //taille de l'alphabet + std::list orb; // nombre premiers avec alpha_size + MathTools mt; // bibliotheque d'outils mathematiques + std::list keyList; + std::list::iterator orbIt; + + for (i=1; i orb; // nombre premiers avec alpha_size - -MathTools mt; // bibliotheque d'outils mathematiques - -std::list keyList; - -std::list::iterator orbIt; - -for (i=1; i::iterator kLIt; -float epsilon; // marge d'erreur + for (kLIt = keyList.begin(); kLIt != keyList.end(); kLIt++){ + float score = 0; + printf("Trying key %s\n", (*kLIt).toString().c_str()); -std::list::iterator kLIt; + plainText = codec.decode(cypherText, *kLIt); + plainText.setAlphabet(this->_config.getAlphabet()); -for (kLIt = keyList.begin(); kLIt != keyList.end(); kLIt++){ + for (int i=0; i<9; i++){ + score += plainText.getCountOf(prio_conf[i]); + } - float score = 0; + score = score / plainText.size(); - printf("Trying key -%s\n", (*kLIt).toString().c_str()); + if (fabs(score - frequencies) < epsilon){ + printf("KEY = + %s\n",(*kLIt).toString().c_str()); - - plainText = -codec.decode(cypherText, -*kLIt); + printf("PLAIN TEXT(%f) = %s\n", fabs + (score-frequencies), - -plainText.setAlphabet(this->_config.getAlphabet()); + plainText.toAlphabet().c_str()); + } + } - for (int i=0; i<9; -i++){ - - - score += -plainText.getCountOf(prio_conf[i]); - - } - - score = score / -plainText.size(); - - if (fabs(score - -frequencies) < epsilon){ - - printf("KEY = -%s\n",(*kLIt).toString().c_str()); - - - printf("PLAIN TEXT(%f) = %s\n", fabs -(score-frequencies), - - - plainText.toAlphabet().c_str()); - - } - - -} ### 5.3. Principe du "decodeur Vigenere" -On commence par faire recuperer les groupes de carateres qui se repetent dans -le texte. +On commence par détecter les groupes de carateres qui se repetent dans le +texte. - -Une fois les groupes repetes de lettres de plus grande longueur obtenus (dans -l'ordre decroissant en fonction de la longueur), on calcule la distance -separant les deux premiers groupes (note d1) puis la distance entre les deux -suivant (d2). +Une fois ces groupes repétes de lettres obtenus (dans l'ordre decroissant en +fonction de leur longueur), on calcule la distance separant les deux premiers +groupes (note d1) puis la distance entre les deux suivant (d2). On pose K = PGCD(d1, d2). Il est fortement probable que K soit un multiple de la longueur de la clef. L'hypothese sous-jacente est que ces groupes de @@ -268,7 +210,7 @@ lettres sont issue du chiffrement des memes bouts de mots avec les memes bouts de la clef. Si le K = 1 on peut raisonnablement supposer que ce n'est pas le cas, et qu'il n'y a pas de repetitions. - + L'etape suivante consiste a faire une analyse de frequence en decoupant le texte en K colonnes. On classe ensuite les lettres apparaissant dans les colonnes en fonction de leur nombre d'apparitions.