README.md: Fix code blocks & option display.

This commit is contained in:
Glenn Y. Rolland 2012-08-15 00:44:06 +02:00
parent 2b295043b2
commit e5e5b75615

106
README.md
View file

@ -32,7 +32,7 @@ version de développement si compilez le programme vous-même):
Il vous suffit de taper (en tant qu'administrateur) les commandes suivantes Il vous suffit de taper (en tant qu'administrateur) les commandes suivantes
pour installer le nécessaire: pour installer le nécessaire:
# apt-get install libglib-2.0-dev # apt-get install libglib-2.0-dev
### 2.2. Sur un système Apple MacOS X (>= 10.3) ### 2.2. Sur un système Apple MacOS X (>= 10.3)
@ -41,7 +41,7 @@ Il est nécessaire d'avoir installé les autotools (automake,
autoconf...) dans leur dernière version. À partir de là, il autoconf...) dans leur dernière version. À partir de là, il
suffit de taper les commandes suivantes dans un terminal : suffit de taper les commandes suivantes dans un terminal :
# sudo fink install glib2-dev # sudo fink install glib2-dev
### 2.3. Sur un système Microsoft Windows ### 2.3. Sur un système Microsoft Windows
@ -56,7 +56,7 @@ Vous pouvez télécharger la version la plus récente du projet sur le depôt Gi
Afin d'obtenir les sources, il vous suffit d'avoir Git installé sur votre système et de taper la commande suivante : Afin d'obtenir les sources, il vous suffit d'avoir Git installé sur votre système et de taper la commande suivante :
$ git clone https://github.com/glenux/cryptaffinity.git $ git clone https://github.com/glenux/cryptaffinity.git
## 4. Utiliser CryptAffinity ## 4. Utiliser CryptAffinity
@ -66,18 +66,18 @@ Afin d'obtenir les sources, il vous suffit d'avoir Git installé sur votre syst
Si vous avez téléchargé une archive, commencez par la decompressez : Si vous avez téléchargé une archive, commencez par la decompressez :
$ tar -xzvf CryptAffinity-0.2.tar.gz $ tar -xzvf CryptAffinity-0.2.tar.gz
Rendez vous ensuite dans le dossier qui vient d'etre crée lors de la Rendez vous ensuite dans le dossier qui vient d'etre crée lors de la
decompression. decompression.
$ cd CryptAffinity-0.2 $ cd CryptAffinity-0.2
Puis lancez l'auto-configuration du logiciel, puis la compilation. Puis lancez l'auto-configuration du logiciel, puis la compilation.
$ ./autogen $ ./autogen
$ ./configure $ ./configure
$ make $ make
Le programme sous forme binaire se trouvera alors dans le sous-dossier Le programme sous forme binaire se trouvera alors dans le sous-dossier
src/tools/, sous le nom break_affinity src/tools/, sous le nom break_affinity
@ -93,26 +93,26 @@ Usage: break_affinity -a <fichier> -e <float> -f <float> -p <fichier> -t
Ou les parametres sont les suivants: &nbs Ou les parametres sont les suivants: &nbs
p_place_holder; p_place_holder;
-a, --alphabet <file> **-a**, **--alphabet** _<file>_
: Fichier contenant les lettres de l'alphabet, dans l'ordre. : Fichier contenant les lettres de l'alphabet, dans l'ordre.
-e, --epsilon <float> **-e**, **--epsilon** _<float>_
: Tolerance pour le test des clefs. : Tolerance pour le test des clefs.
-f, --frequencies <float> **-f**, **--frequencies** _<float>_
: Proportion moyenne que représentent les 9 lettres "prioritaires" dans le texte : Proportion moyenne que représentent les 9 lettres "prioritaires" dans le texte
clair. clair.
-k, --keylength <int> **-k**, **--keylength** _<int>_
: Taille de la clef maximum (obsolète) : Taille de la clef maximum (obsolète)
-p, --priorities <file> **-p**, **--priorities** _<file>_
: Lettres ordonnées par fréquence décroissante d'apparition dans le texte clair. : Lettres ordonnées par fréquence décroissante d'apparition dans le texte clair.
-t, --text <file> **-t**, **--text** _<file>_
: Fichier contenant le texte chiffre. : Fichier contenant le texte chiffre.
-m, --mode <a|v> **-m**, **--mode** _<a|v>_
: Sélection du mode "Affine" ou "Vigenere" : Sélection du mode "Affine" ou "Vigenere"
@ -128,59 +128,57 @@ doc/html de l'application, ou en suivant [ce lien](html/index.html).
On génère l'espace des clefs possibles pour l'alphabet donne On génère l'espace des clefs possibles pour l'alphabet donne
en entrée: en entrée:
int alpha_size; //taille de l'alphabet int alpha_size; //taille de l'alphabet
std::list<int> orb; // nombre premiers avec alpha_size std::list<int> orb; // nombre premiers avec alpha_size
MathTools mt; // bibliotheque d'outils mathematiques MathTools mt; // bibliotheque d'outils mathematiques
std::list<KeyAfine> keyList; std::list<KeyAfine> keyList;
std::list<int>::iterator orbIt; std::list<int>::iterator orbIt;
for (i=1; i<alpha_size; i++){ for (i=1; i<alpha_size; i++){
if (mt.pgcd(i, alpha_size) == 1) { if (mt.pgcd(i, alpha_size) == 1) {
orb.push_back(i); orb.push_back(i);
}
}
// 1 - generer l'espace des 312 clefs
for (orbIt = orb.begin(); orbIt != orb.end(); orbIt++){
KeyAfine key;
key.setCoefA((*orbIt));
for (i=0; i<alpha_size; i++){
key.setCoefB(i);
keyList.push_back(key);
} }
} }
// 1 - generer l'espace des 312 clefs
for (orbIt = orb.begin(); orbIt != orb.end(); orbIt++){
KeyAfine key;
key.setCoefA((*orbIt));
for (i=0; i<alpha_size; i++){
key.setCoefB(i);
keyList.push_back(key);
}
}
Puis on fait une attaque par analyse de frequence sur les textes obtenus par Puis on fait une attaque par analyse de frequence sur les textes obtenus par
"decodage" du texte chiffre avec les clefs essayees. "decodage" du texte chiffre avec les clefs essayees.
float frequencies; // frequence cumulee des 9 lettres les float frequencies; // frequence cumulee des 9 lettres les
plus presentes plus presentes
float epsilon; // marge d'erreur float epsilon; // marge d'erreur
std::list<KeyAfine>::iterator kLIt; std::list<KeyAfine>::iterator kLIt;
for (kLIt = keyList.begin(); kLIt != keyList.end(); kLIt++){ for (kLIt = keyList.begin(); kLIt != keyList.end(); kLIt++){
float score = 0; float score = 0;
printf("Trying key %s\n", (*kLIt).toString().c_str()); printf("Trying key %s\n", (*kLIt).toString().c_str());
plainText = codec.decode(cypherText, *kLIt); plainText = codec.decode(cypherText, *kLIt);
plainText.setAlphabet(this->_config.getAlphabet()); plainText.setAlphabet(this->_config.getAlphabet());
for (int i=0; i<9; i++){ for (int i=0; i<9; i++){
score += plainText.getCountOf(prio_conf[i]); score += plainText.getCountOf(prio_conf[i]);
} }
score = score / plainText.size(); score = score / plainText.size();
if (fabs(score - frequencies) < epsilon){ if (fabs(score - frequencies) < epsilon){
printf("KEY = printf("KEY = %s\n",(*kLIt).toString().c_str());
%s\n",(*kLIt).toString().c_str());
printf("PLAIN TEXT(%f) = %s\n", fabs printf("PLAIN TEXT(%f) = %s\n", fabs(score-frequencies),
(score-frequencies),
plainText.toAlphabet().c_str()); plainText.toAlphabet().c_str());
} }
} }
### 5.3. Principe du "decodeur Vigenere" ### 5.3. Principe du "decodeur Vigenere"