diff --git a/.gitignore b/.gitignore index d331981..2b85904 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ __pycache__/** **.txt.** !poem.txt.** !poem.txt +!celle_qui_est_voilee.txt +!stats/**.txt diff --git a/src/analysis/__pycache__/functions.cpython-310.pyc b/src/analysis/__pycache__/functions.cpython-310.pyc new file mode 100644 index 0000000..63dcceb Binary files /dev/null and b/src/analysis/__pycache__/functions.cpython-310.pyc differ diff --git a/src/analysis/ic.py b/src/analysis/ic.py index 7ae1209..e192211 100644 --- a/src/analysis/ic.py +++ b/src/analysis/ic.py @@ -41,10 +41,21 @@ def ic(filename): y.append(chr(ord('a') + alphabet)) plt.bar(y, allIC, largeur) # plt.show() - + return ic if __name__ == "__main__": - ic("test.txt") - ic("foo.txt") - ic("poem.txt") - ic("poem.txt.crypt") + ic1 = ic("stats/le_bateau_ivre.txt") + ic2 = ic("stats/celle_qui_est_voilee.txt") + ic3 = ic("stats/poem.txt") + ic4 = ic("stats/a_une_madone.txt") + ic5 = ic("stats/homme_et_la_mer.txt") + ic6 = ic("stats/cyrano_bergerac.txt") + + # Average + icavr = (ic1 + ic2 + ic3 + ic4 + ic5 + ic6) / 6 + print(f"Average of these ICs: {icavr}") + + # Do the same with the Caesar cipher + ic1 = ic("stats/poem.txt.crypt") + + print(ic1) diff --git a/src/cryptanalysis.py b/src/cryptanalysis.py index fcbda6b..216984d 100644 --- a/src/cryptanalysis.py +++ b/src/cryptanalysis.py @@ -26,7 +26,8 @@ def is_ascii_file(filename) -> bool: #content = f.readlines() line = f.readline() try: - line.decode('ascii') + # line.decode('ascii') + line.decode('utf-8') except UnicodeDecodeError: res = False else: @@ -34,6 +35,15 @@ def is_ascii_file(filename) -> bool: return res +def ascii_file(filename): + """ + In this function, we are analyse the file with IC, Bigram and Trigram + Based on the IC result, we are trying to brute force the Caesar Cipher or Vigenere + + If the result of the IC is lower than 0.007, it's an average + + """ + def cryptanalysis(): args = checkArguments() @@ -42,19 +52,31 @@ def cryptanalysis(): exit(-1) sig = get_signature(args.filename) + # print(sig) if(is_ascii_file(args.filename)): print("It may be an ascii-endocoded file") + ascii_file(args.filename) else: print("it may be not an ascii-encoded file") + """ + If the text is a ASCII text, we are going to analyse the file + Try to identify the kind of cipher, such as Caesar, Vigenere, Polybius + + With the IC, we can identify if the text used a substitution cipher or not + https://www.southampton.ac.uk/~wright/1001/index-of-coincidence.html + """ + # We are trying to identify the kind of cipher # Analysis with IC, trigram and Bigram # Brute force it + # Try to identify if the message is french or english + # Analysis with IC, trigram and Bigram if __name__ == "__main__": diff --git a/src/stats/celle_qui_est_voilee.txt b/src/stats/celle_qui_est_voilee.txt new file mode 100644 index 0000000..fcd3c5a --- /dev/null +++ b/src/stats/celle_qui_est_voilee.txt @@ -0,0 +1,146 @@ +Tu me parles du fond d’un rêve +Comme une âme parle aux vivants. +Comme l’écume de la grève, +Ta robe flotte dans les vents. + +Je suis l’algue des flots sans nombre, +Le captif du destin vainqueur ; +Je suis celui que toute l’ombre +Couvre sans éteindre son coeur. + +Mon esprit ressemble à cette île, +Et mon sort à cet océan ; +Et je suis l’habitant tranquille +De la foudre et de l’ouragan. + +Je suis le proscrit qui se voile, +Qui songe, et chante, loin du bruit, +Avec la chouette et l’étoile, +La sombre chanson de la nuit. + +Toi, n’es-tu pas, comme moi-même, +Flambeau dans ce monde âpre et vil, +Ame, c’est-à-dire problème, +Et femme, c’est-à-dire exil ? + +Sors du nuage, ombre charmante. +O fantôme, laisse-toi voir ! +Sois un phare dans ma tourmente, +Sois un regard dans mon ciel noir ! + +Cherche-moi parmi les mouettes ! +Dresse un rayon sur mon récif, +Et, dans mes profondeurs muettes, +La blancheur de l’ange pensif ! + +Sois l’aile qui passe et se mêle +Aux grandes vagues en courroux. +Oh, viens ! tu dois être bien belle, +Car ton chant lointain est bien doux ; + +Car la nuit engendre l’aurore ; +C’est peut-être une loi des cieux +Que mon noir destin fasse éclore +Ton sourire mystérieux ! + +Dans ce ténébreux monde où j’erre, +Nous devons nous apercevoir, +Toi, toute faite de lumière, +Moi, tout composé de devoir ! + +Tu me dis de loin que tu m’aimes, +Et que, la nuit, à l’horizon, +Tu viens voir sur les grèves blêmes +Le spectre blanc de ma maison. + +Là, méditant sous le grand dôme, +Près du flot sans trêve agité, +Surprise de trouver l’atome +Ressemblant à l’immensité, + +Tu compares, sans me connaître, +L’onde à l’homme, l’ombre au banni, +Ma lampe étoilant ma fenêtre +A l’astre étoilant l’infini ! + +Parfois, comme au fond d’une tombe, +Je te sens sur mon front fatal, +Bouche de l’Inconnu d’où tombe +Le pur baiser de l’Idéal. + +A ton souffle, vers Dieu poussées, +Je sens en moi, douce frayeur, +Frissonner toutes mes pensées, +Feuilles de l’arbre intérieur. + +Mais tu ne veux pas qu’on te voie ; +Tu viens et tu fuis tour à tour ; +Tu ne veux pas te nommer joie, +Ayant dit : Je m’appelle amour. + +Oh ! fais un pas de plus ! Viens, entre, +Si nul devoir ne le défend ; +Viens voir mon âme dans son antre, +L’esprit lion, le coeur enfant ; + +Viens voir le désert où j’habite +Seul sous mon plafond effrayant ; +Sois l’ange chez le cénobite, +Sois la clarté chez le voyant. + +Change en perles dans mes décombres +Toutes mes gouttes de sueur ! +Viens poser sur mes oeuvres sombres +Ton doigt d’où sort une lueur ! + +Du bord des sinistres ravines +Du rêve et de la vision, +J’entrevois les choses divines… – +Complète l’apparition ! + +Viens voir le songeur qui s’enflamme +A mesure qu’il se détruit, +Et, de jour en jour, dans son âme +A plus de mort et moins de nuit ! + +Viens ! viens dans ma brume hagarde, +Où naît la foi, d’où l’esprit sort, +Où confusément je regarde +Les formes obscures du sort. + +Tout s’éclaire aux lueurs funèbres ; +Dieu, pour le penseur attristé, +Ouvre toujours dans les ténèbres +De brusques gouffres de clarté. + +Avant d’être sur cette terre, +Je sens que jadis j’ai plané ; +J’étais l’archange solitaire, +Et mon malheur, c’est d’être né. + +Sur mon âme, qui fut colombe, +Viens, toi qui des cieux as le sceau. +Quelquefois une plume tombe +Sur le cadavre d’un oiseau. + +Oui, mon malheur irréparable, +C’est de pendre aux deux éléments, +C’est d’avoir en moi, misérable, +De la fange et des firmaments ! + +Hélas ! hélas ! c’est d’être un homme ; +C’est de songer que j’étais beau, +D’ignorer comment je me nomme, +D’être un ciel et d’être un tombeau ! + +C’est d’être un forçat qui promène +Son vil labeur sous le ciel bleu ; +C’est de porter la hotte humaine +Où j’avais vos ailes, mon Dieu ! + +C’est de traîner de la matière ; +C’est d’être plein, moi, fils du jour, +De la terre du cimetière, +Même quand je m’écrie : Amour ! + +Victor Hugo, Les contemplations diff --git a/src/poem.txt b/src/stats/poem.txt similarity index 100% rename from src/poem.txt rename to src/stats/poem.txt diff --git a/src/poem.txt.crypt b/src/stats/poem.txt.crypt similarity index 100% rename from src/poem.txt.crypt rename to src/stats/poem.txt.crypt