From 16fa7489f90c514c6eaaa79a1633af871919d35d Mon Sep 17 00:00:00 2001 From: geoffrey Date: Sun, 1 Mar 2026 21:07:14 +0100 Subject: [PATCH] upd --- src/__main__.py | 3 + src/__pycache__/cipher.cpython-311.pyc | Bin 0 -> 697 bytes src/__pycache__/substitution.cpython-311.pyc | Bin 0 -> 1081 bytes src/analysis/__init__.py | 1 + src/analysis/__main__.py | 3 + .../__pycache__/functions.cpython-39.pyc | Bin 0 -> 696 bytes src/analysis/functions.py | 25 ++++ src/analysis/getgrams.py | 66 +++++++++ src/analysis/ic.py | 50 +++++++ src/cipher.py | 11 ++ src/cryptanalysis.py | 61 ++++++++ src/main | Bin 0 -> 16840 bytes src/main.c | 51 +++++++ src/poem.txt | 139 ++++++++++++++++++ src/poem.txt.crypt | 139 ++++++++++++++++++ src/raw_file.py | 36 +++++ src/substitution.py | 18 +++ src/tests/ciphertext.rsa | Bin 0 -> 256 bytes src/tests/private.key | 27 ++++ src/tests/public.key | 27 ++++ src/tests/public.pem | 9 ++ src/transposition.py | 10 ++ 22 files changed, 676 insertions(+) create mode 100644 src/__main__.py create mode 100644 src/__pycache__/cipher.cpython-311.pyc create mode 100644 src/__pycache__/substitution.cpython-311.pyc create mode 100644 src/analysis/__init__.py create mode 100644 src/analysis/__main__.py create mode 100644 src/analysis/__pycache__/functions.cpython-39.pyc create mode 100644 src/analysis/functions.py create mode 100644 src/analysis/getgrams.py create mode 100644 src/analysis/ic.py create mode 100644 src/cipher.py create mode 100644 src/cryptanalysis.py create mode 100755 src/main create mode 100644 src/main.c create mode 100644 src/poem.txt create mode 100644 src/poem.txt.crypt create mode 100644 src/raw_file.py create mode 100644 src/substitution.py create mode 100644 src/tests/ciphertext.rsa create mode 100644 src/tests/private.key create mode 100644 src/tests/public.key create mode 100644 src/tests/public.pem create mode 100644 src/transposition.py diff --git a/src/__main__.py b/src/__main__.py new file mode 100644 index 0000000..066c83e --- /dev/null +++ b/src/__main__.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python3 + + diff --git a/src/__pycache__/cipher.cpython-311.pyc b/src/__pycache__/cipher.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af6805160515e04d1f431838af297d3b2b92ef1a GIT binary patch literal 697 zcmZuuy-veG4EE)x1k@G;8&hG+(nu^YAQnJXmo6}MIYqfEL`s@+mkwpB5Cd<}7eJtj zmtjPan0SGrGBIH%O~s$1eEICNKiikbT5S!`qV@Z5g5NiCO0yPZ-as+|16m;976f}R z0G{wItP8?81J?}70DalQnQtSRfP^j+&@}|Rg{~M7Os=ZeG+zZrbkotW;8tG7b zS_NK^cWMqsnZtS54^z&s*NgVeGC)h~6@)RoIMq9Ajue9BvglCne7FrH6G#zDyJ5;k zj$>|hlC&KUB1!W|ajI0JTtks?W(hy_HAyxa%ArVA$W#VtG0OGUVx;duD%6xahS&Pe zv$Lb6RVSbe%}evfiuTBXh~7gOFQ1vg z?Ai>LP+|5ixxb;1BY}>~3dNsYKApp2t|PUHS#*DTA7N%P#%2|pq2gb7r`X3o2YJ6Q DiB*(f literal 0 HcmV?d00001 diff --git a/src/__pycache__/substitution.cpython-311.pyc b/src/__pycache__/substitution.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ccbf7406cce29c7ade3620950ddffd6447ef2c88 GIT binary patch literal 1081 zcmZuwF>ljA6uz@#lcY|osvyxWwFFC~G!_hhEc zhYkz{A*CY&Dxhxsl2+MeCHJt^`V5QOFkY)IH+m7(G%6IfgHjy6P$0q^$kIX_+Sa zeZRfKc+DN}rvosiGFpLQKp3f0kJJ^9?h*6{%y}wA$tA{i{8C6?#?p^McjAZ6s3Yr0 z2f!@Bp4Pr0XHKx7A<)3Q*syk@7PFcxYBV_OSPvpMZn01bYwPh-%jKQ6bV4WS2wzx& zyOx;YtF}8y-nRYFm$u!#F`G(tvYZDNaSfnP&hy58ZUicE6~wV%InzXYpbUtdImD}} z?$I7S0U{W$JrUAO8=gwMpbFFT^czdU^%Q5j9 zbWGta(FJq3yOU^b?uRnbnmmfzWtC&GlAPyACs8?s#^XRfynyRQMx5Q3?((H-&u-0u zv3Lm3Cx7!~Vey@RxbXG*>3sEUzPhiT&&>}BEto%y#e-Xe@`v)_=KIRW%Bit>W~`n} z-k}O6sU62~wX%kd4xJXW?WAbit;mZ5)D7Ey9Xmm`!||WtO90_TmS$7 literal 0 HcmV?d00001 diff --git a/src/analysis/__init__.py b/src/analysis/__init__.py new file mode 100644 index 0000000..e5a0d9b --- /dev/null +++ b/src/analysis/__init__.py @@ -0,0 +1 @@ +#!/usr/bin/env python3 diff --git a/src/analysis/__main__.py b/src/analysis/__main__.py new file mode 100644 index 0000000..8398526 --- /dev/null +++ b/src/analysis/__main__.py @@ -0,0 +1,3 @@ +#!/usr/Bin/env python3 + + diff --git a/src/analysis/__pycache__/functions.cpython-39.pyc b/src/analysis/__pycache__/functions.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae6783aa527fc7f18cca1caed91459326ba10bf4 GIT binary patch literal 696 zcmY*XL5tNe5Y8lNH@o!7D&oO|hrJbCyPotQvfx7z zk`Wx4$VeRwc;H089gl2a=kx-123V4lgONKn@N<5FASOCS19edVF+>x4gq3FpZ?O-@ zF)<)|{~@vY5rKKULpx9e7_B^*ZPdH!@bNZ&|DibCo_LbR2-q3VyS37O*Qi1^wN}`>c!!tYD(3>PG3JRi4Yj6vMyXZ(j774PLjC24=kuNwC10W-8Wx~^31~cPMndeS@aXxXKE1Flz zIc01fH?uRR{53bR!Y5_dYxghdHb!iCSVB1n*aLG1{Z$%yYSc{N%;*ew-n!N;+|0}^ V#gn#^eWRX+E7`~g`(nb-gT literal 0 HcmV?d00001 diff --git a/src/analysis/functions.py b/src/analysis/functions.py new file mode 100644 index 0000000..8484385 --- /dev/null +++ b/src/analysis/functions.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +from re import sub +from unidecode import unidecode + + +def readFile(filename): + data = None + dataFile = str() + + with open(filename, 'r') as f: + data = f.readlines() + + for d in data: + u = unidecode(d.lower(), 'utf-8') + dataFile += sub(r'[^a-z]', '', u) + + return dataFile + +def countLetters(text): + # Get number of letters + totalLetters = 0 + for letter in text: + totalLetters += 1 + return totalLetters diff --git a/src/analysis/getgrams.py b/src/analysis/getgrams.py new file mode 100644 index 0000000..a3c191e --- /dev/null +++ b/src/analysis/getgrams.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +from collections import Counter +from argparse import ArgumentParser +import matplotlib.pyplot as plt +import re + + +def checkArguments(): + args = ArgumentParser(description='Cryptanalyst') + args.add_argument('-f', '--filename', help='Text to analyze') + args.add_argument('-b', '--bigram', help='Get bigram', action="store_true") + args.add_argument('-t', '--trigram', help='Get trigram', action="store_true") + return args.parse_args() + +def readFile(filename): + """ + This read the file passed in argument and return the data of it + """ + text = str() + with open(filename, 'r') as f: + data = f.readlines() + + for entry in data: + text += entry + + return text + +def getLetters(text, pos): + return Counter([text[idx: idx + pos] for idx in range(len(text) - 1)]) + +if __name__ == "__main__": + args = checkArguments() + text = readFile(args.filename) + + if args.bigram: + data = getLetters(text, 2) + if args.trigram: + data = getLetters(text, 3) + + dataSorted = {k: v for k, v in sorted(data.items(), key=lambda item: item[1])} + dataSorted = list(dataSorted.items()) + newDataSorted = [] + + if args.bigram: + reg = "[A-Za-z]{2}" + if args.trigram: + reg = "[A-Za-z]{3}" + + for entry in dataSorted: + if re.match(reg, entry[0]): + newDataSorted.append(( + entry[0], entry[1] + )) + + lenDataSorted = len(newDataSorted) + + x = [] + y = [] + for entry in newDataSorted[lenDataSorted - 10:]: + x.append(entry[0]) + y.append(entry[1]) + + largeur = 0.5 + plt.bar(x, y, largeur) + plt.show() diff --git a/src/analysis/ic.py b/src/analysis/ic.py new file mode 100644 index 0000000..7ae1209 --- /dev/null +++ b/src/analysis/ic.py @@ -0,0 +1,50 @@ +# coding: utf-8 + +from argparse import ArgumentParser +from functions import readFile, countLetters +import matplotlib.pyplot as plt + + +def ic(filename): + # Read file + dataFile = readFile(filename) + + # Get number of letters + totalLetters = countLetters(dataFile) + + counts = [] + + for i in range (0, 26): + counts.append(0) + + # Count the number of letter in our text + letterToAscii = ord('a') # Get the ASCII code + for i in dataFile: + l = ord(i) - letterToAscii + if l >= 0 and l <= 26: + counts[l] += 1 + + # We calculate the sum of all character in the text + ic = 0 + allIC = list() + for i in range(0, len(counts)): + sum = (counts[i] * (counts[i] - 1)) + currentIC = sum / (totalLetters * (totalLetters - 1)) + allIC.append(currentIC) + ic += currentIC + print(f"{filename}") + print(f"Index of coincidence: {ic}", end="\n\n") + + largeur = 0.5 + y = list() + for alphabet in range(0, 26): + y.append(chr(ord('a') + alphabet)) + plt.bar(y, allIC, largeur) + # plt.show() + + +if __name__ == "__main__": + ic("test.txt") + ic("foo.txt") + ic("poem.txt") + ic("poem.txt.crypt") diff --git a/src/cipher.py b/src/cipher.py new file mode 100644 index 0000000..5cf124e --- /dev/null +++ b/src/cipher.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 + +class Cipher: + def __init__(self): + pass + + def detectCipher(self, data): + raise NotImplementedError + + + diff --git a/src/cryptanalysis.py b/src/cryptanalysis.py new file mode 100644 index 0000000..fcbda6b --- /dev/null +++ b/src/cryptanalysis.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +from argparse import ArgumentParser +from subprocess import Popen, PIPE + + +def checkArguments(): + args = ArgumentParser(description='Cryptanalyst') + args.add_argument('-f', '--filename', help='Text to analyze') + return args.parse_args() + +def get_signature(filename): + p = Popen(['xxd', '-p', filename], stdout=PIPE) + hexdump = p.communicate()[0] + + # We get the 10 first hex data + + # Identify sig files + signatures = list() + + return hexdump[:10] + +def is_ascii_file(filename) -> bool: + res = False + with open(filename, "rb") as f: + #content = f.readlines() + line = f.readline() + try: + line.decode('ascii') + except UnicodeDecodeError: + res = False + else: + res = True + + return res + +def cryptanalysis(): + args = checkArguments() + + if args.filename is None: + print("Please, you must specify the filename") + exit(-1) + + sig = get_signature(args.filename) + + + if(is_ascii_file(args.filename)): + print("It may be an ascii-endocoded file") + else: + print("it may be not an ascii-encoded file") + + # We are trying to identify the kind of cipher + + # Analysis with IC, trigram and Bigram + + # Brute force it + + # Analysis with IC, trigram and Bigram + +if __name__ == "__main__": + cryptanalysis() diff --git a/src/main b/src/main new file mode 100755 index 0000000000000000000000000000000000000000..45b971e90293a16ce4e5ed3412b047b427ce535b GIT binary patch literal 16840 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 literal 0 HcmV?d00001 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..eaad633 --- /dev/null +++ b/src/main.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include +#include +#include + +static void just_read(int fd); +static void read_and_copy(int fd_r); +int main(void){ + int fd; + FILE *f; + int len; + char buf[BUFSIZ]; + + /*if ((fd = open("test.txt", O_RDONLY)) < 0){ + printf("Failed to open the file\n"); + exit(-1); + } + + just_read(fd); + + close(fd);*/ + //f = fopen("test.txt", "r"); + f = fopen("__main__.py", "r"); + //f = fopen("raw_file.py", "r"); + + if (!f) + return 0; + + for (int i = 0; i < 5; i++){ + char c; + c = fgetc(f); + printf("%x\n", c); + } + + fclose(f); + return 0; +} +static void just_read(int fd){ + char buf[BUFSIZ]; + int len; + + // Go to the up of the file + lseek(fd, 0, SEEK_SET); + /*while ((len = read(fd, buf, BUFSIZ)) > 0){ + printf("%s\n", buf); + memset(buf, 0, BUFSIZ); + }*/ + +} diff --git a/src/poem.txt b/src/poem.txt new file mode 100644 index 0000000..1b1adc2 --- /dev/null +++ b/src/poem.txt @@ -0,0 +1,139 @@ +Ô saint prêtre ! grande âme ! oh ! je tombe à genoux ! +Jeune, il avait encor de longs jours parmi nous, +Il n'en a pas compté le nombre ; +Il était à cet âge où le bonheur fleurit ; +Il a considéré la croix de Jésus-Christ +Toute rayonnante dans l'ombre. + +Il a dit : — « C'est le Dieu de progrès et d'amour. +Jésus, qui voit ton front croit voir le front du jour. +Christ sourit à qui le repousse. +Puisqu'il est mort pour nous, je veux mourir pour lui ; +Dans son tombeau, dont j'ai la pierre pour appui, +Il m'appelle d'une voix douce. + +« Sa doctrine est le ciel entr'ouvert ; par la main, +Comme un père l'enfant, il tient le genre humain ; +Par lui nous vivons et nous sommes ; +Au chevet des geôliers dormant dans leurs maisons, +Il dérobe les clefs de toutes les prisons +Et met en liberté les hommes. + +« Or il est, loin de nous, une autre humanité +Qui ne le connaît point, et dans l'iniquité +Rampe enchaînée, et souffre et tombe ; +Ils font pour trouver Dieu de ténébreux efforts ; +Ils s'agitent en vain ; ils sont comme des morts +Qui tâtent le mur de leur tombe. + +« Sans loi, sans but, sans guide, ils errent ici-bas. +Ils sont méchants, étant ignorants ; ils n'ont pas +Leur part de la grande conquête. +J'irai. Pour les sauver je quitte le saint lieu. +Ô mes frères, je viens vous apporter mon Dieu, +Je viens vous apporter ma tête ! » — + +Prêtre, il s'est souvenu, calme en nos jours troublés, +De la parole dite aux apôtres : — Allez, +Bravez les bûchers et les claies ! — +Et de l'adieu du Christ au suprême moment : +— Ô vivant, aimez-vous ! aimez. En vous aimant, +Frères, vous fermerez mes plaies. — + +Il s'est dit qu'il est bon d'éclairer dans leur nuit +Ces peuples égarés loin du progrès qui luit, +Dont l'âme est couverte de voiles ; +Puis il s'en est allé, dans les vents, dans les flots, +Vers les noirs chevalets et les sanglants billots, +Les yeux fixés sur les étoiles. + +II. + +Ceux vers qui cet apôtre allait, l'ont égorgé. + +III. + +Oh ! tandis que là-bas, hélas ! chez ces barbares, +S'étale l'échafaud de tes membres chargé, +Que le bourreau, rangeant ses glaives et ses barres, +Frotte au gibet son ongle où ton sang s'est figé ; + +Ciel ! tandis que les chiens dans ce sang viennent boire, +Et que la mouche horrible, essaim au vol joyeux, +Comme dans une ruche entre en ta bouche noire +Et bourdonne au soleil dans les trous de tes yeux ; + +Tandis qu'échevelée, et sans voix, sans paupières, +Ta tête blême est là sur un infâme pieu, +Livrée aux vils affronts, meurtrie à coups de pierres, +Ici, derrière toi, martyr, on vend ton Dieu ! + +Ce Dieu qui n'est qu'à toi, martyr, on te le vole ! +On le livre à Mandrin, ce Dieu pour qui tu meurs ! +Des hommes, comme toi revêtus de l'étole, +Pour être cardinaux, pour être sénateurs, + +Des prêtres, pour avoir des palais, des carrosses, +Et des jardins l'été riant sous le ciel bleu, +Pour argenter leur mitre et pour dorer leurs crosses, +Pour boire de bon vin, assis près d'un bon feu, + +Au forban dont la main dans le meurtre est trempée, +Au larron chargé d'or qui paye et qui sourit, +Grand Dieu ! retourne-toi vers nous, tête coupée ! +Ils vendent Jésus-Christ ! ils vendent Jésus-Christ ! + +Ils livrent au bandit, pour quelques sacs sordides, +L'évangile, la loi, l'autel épouvanté, +Et la justice aux yeux sévères et candides, +Et l'étoile du coeur humain, la vérité ! + +Les bons jetés, vivants, au bagne, ou morts, aux fleuves, +L'homme juste proscrit par Cartouche Sylla, +L'innocent égorgé, le deuil sacré des veuves, +Les pleurs de l'orphelin, ils vendent tout cela ! + +Tout ! la foi, le serment que Dieu tient sous sa garde, +Le saint temple où, mourant, tu dis :Introïbo, +Ils livrent tout ! pudeur, vertu ! — martyr, regarde, +Rouvre tes yeux qu'emplit la lueur du tombeau ; — + +Ils vendent l'arche auguste où l'hostie étincelle ! +Ils vendent Christ, te dis-je ! et ses membres liés ! +Ils vendent la sueur qui sur son front ruisselle, +Et les clous de ses mains, et les clous de ses pieds ! + +Ils vendent au brigand qui chez lui les attire +Le grand crucifié sur les hommes penché ; +Ils vendent sa parole, ils vendent son martyre, +Et ton martyre à toi par-dessus le marché ! + +Tant pour les coups de fouet qu'il reçut à la porte ! +César ! tant pour l'amen, tant pour l'alléluia ! +Tant pour la pierre où vint heurter sa tête morte ! +Tant pour le drap rougi que sa barbe essuya ! + +Ils vendent ses genoux meurtris, sa palme verte, +Sa plaie au flanc, son oeil tout baigné d'infini, +Ses pleurs, son agonie, et sa bouche entrouverte, +Et le cri qu'il poussa : Lamma Sabacthani ! + +Ils vendent le sépulcre ! ils vendent les ténèbres ! +Les séraphins chantant au seuil profond des cieux, +Et la mère debout sous l'arbre aux bras funèbres, +Qui, sentant là son fils, ne levait pas les yeux ! + +Oui, ces évêques, oui, ces marchands, oui, ces prêtres +A l'histrion du crime, assouvi, couronné, +A ce Néron repu qui rit parmi les traîtres, +Un pied sur Thraséas, un coude sur Phryné, + +Au voleur qui tua les lois à coups de crosse, +Au pirate empereur Napoléon dernier, +Ivre deux fois, immonde encor plus que féroce, +Pourceau dans le cloaque et loup dans le charnier, + +Ils vendent, ô martyr, le Dieu pensif et pâle +Qui, debout sur la terre et sous le firmament, +Triste et nous souriant dans notre nuit fatale, +Sur le noir Golgotha saigne éternellement ! diff --git a/src/poem.txt.crypt b/src/poem.txt.crypt new file mode 100644 index 0000000..919e232 --- /dev/null +++ b/src/poem.txt.crypt @@ -0,0 +1,139 @@ +Ô WEMRX TVêXVI ! KVERHI âQI ! SL ! NI XSQFI à KIRSYB ! +NIYRI, MP EZEMX IRGSV HI PSRKW NSYVW TEVQM RSYW, +MP R'IR E TEW GSQTXé PI RSQFVI ; +MP éXEMX à GIX âKI Sù PI FSRLIYV JPIYVMX ; +MP E GSRWMHéVé PE GVSMB HI NéWYW-GLVMWX +XSYXI VECSRRERXI HERW P'SQFVI. + +MP E HMX : — « G'IWX PI HMIY HI TVSKVèW IX H'EQSYV. +NéWYW, UYM ZSMX XSR JVSRX GVSMX ZSMV PI JVSRX HY NSYV. +GLVMWX WSYVMX à UYM PI VITSYWWI. +TYMWUY'MP IWX QSVX TSYV RSYW, NI ZIYB QSYVMV TSYV PYM ; +HERW WSR XSQFIEY, HSRX N'EM PE TMIVVI TSYV ETTYM, +MP Q'ETTIPPI H'YRI ZSMB HSYGI. + +« WE HSGXVMRI IWX PI GMIP IRXV'SYZIVX ; TEV PE QEMR, +GSQQI YR TèVI P'IRJERX, MP XMIRX PI KIRVI LYQEMR ; +TEV PYM RSYW ZMZSRW IX RSYW WSQQIW ; +EY GLIZIX HIW KIôPMIVW HSVQERX HERW PIYVW QEMWSRW, +MP HéVSFI PIW GPIJW HI XSYXIW PIW TVMWSRW +IX QIX IR PMFIVXé PIW LSQQIW. + +« SV MP IWX, PSMR HI RSYW, YRI EYXVI LYQERMXé +UYM RI PI GSRREîX TSMRX, IX HERW P'MRMUYMXé +VEQTI IRGLEîRéI, IX WSYJJVI IX XSQFI ; +MPW JSRX TSYV XVSYZIV HMIY HI XéRéFVIYB IJJSVXW ; +MPW W'EKMXIRX IR ZEMR ; MPW WSRX GSQQI HIW QSVXW +UYM XâXIRX PI QYV HI PIYV XSQFI. + +« WERW PSM, WERW FYX, WERW KYMHI, MPW IVVIRX MGM-FEW. +MPW WSRX QéGLERXW, éXERX MKRSVERXW ; MPW R'SRX TEW +PIYV TEVX HI PE KVERHI GSRUYêXI. +N'MVEM. TSYV PIW WEYZIV NI UYMXXI PI WEMRX PMIY. +Ô QIW JVèVIW, NI ZMIRW ZSYW ETTSVXIV QSR HMIY, +NI ZMIRW ZSYW ETTSVXIV QE XêXI ! » — + +TVêXVI, MP W'IWX WSYZIRY, GEPQI IR RSW NSYVW XVSYFPéW, +HI PE TEVSPI HMXI EYB ETôXVIW : — EPPID, +FVEZID PIW FûGLIVW IX PIW GPEMIW ! — +IX HI P'EHMIY HY GLVMWX EY WYTVêQI QSQIRX : +— Ô ZMZERX, EMQID-ZSYW ! EMQID. IR ZSYW EMQERX, +JVèVIW, ZSYW JIVQIVID QIW TPEMIW. — + +MP W'IWX HMX UY'MP IWX FSR H'éGPEMVIV HERW PIYV RYMX +GIW TIYTPIW éKEVéW PSMR HY TVSKVèW UYM PYMX, +HSRX P'âQI IWX GSYZIVXI HI ZSMPIW ; +TYMW MP W'IR IWX EPPé, HERW PIW ZIRXW, HERW PIW JPSXW, +ZIVW PIW RSMVW GLIZEPIXW IX PIW WERKPERXW FMPPSXW, +PIW CIYB JMBéW WYV PIW éXSMPIW. + +MM. + +GIYB ZIVW UYM GIX ETôXVI EPPEMX, P'SRX éKSVKé. + +MMM. + +SL ! XERHMW UYI Pà-FEW, LéPEW ! GLID GIW FEVFEVIW, +W'éXEPI P'éGLEJEYH HI XIW QIQFVIW GLEVKé, +UYI PI FSYVVIEY, VERKIERX WIW KPEMZIW IX WIW FEVVIW, +JVSXXI EY KMFIX WSR SRKPI Sù XSR WERK W'IWX JMKé ; + +GMIP ! XERHMW UYI PIW GLMIRW HERW GI WERK ZMIRRIRX FSMVI, +IX UYI PE QSYGLI LSVVMFPI, IWWEMQ EY ZSP NSCIYB, +GSQQI HERW YRI VYGLI IRXVI IR XE FSYGLI RSMVI +IX FSYVHSRRI EY WSPIMP HERW PIW XVSYW HI XIW CIYB ; + +XERHMW UY'éGLIZIPéI, IX WERW ZSMB, WERW TEYTMèVIW, +XE XêXI FPêQI IWX Pà WYV YR MRJâQI TMIY, +PMZVéI EYB ZMPW EJJVSRXW, QIYVXVMI à GSYTW HI TMIVVIW, +MGM, HIVVMèVI XSM, QEVXCV, SR ZIRH XSR HMIY ! + +GI HMIY UYM R'IWX UY'à XSM, QEVXCV, SR XI PI ZSPI ! +SR PI PMZVI à QERHVMR, GI HMIY TSYV UYM XY QIYVW ! +HIW LSQQIW, GSQQI XSM VIZêXYW HI P'éXSPI, +TSYV êXVI GEVHMREYB, TSYV êXVI WéREXIYVW, + +HIW TVêXVIW, TSYV EZSMV HIW TEPEMW, HIW GEVVSWWIW, +IX HIW NEVHMRW P'éXé VMERX WSYW PI GMIP FPIY, +TSYV EVKIRXIV PIYV QMXVI IX TSYV HSVIV PIYVW GVSWWIW, +TSYV FSMVI HI FSR ZMR, EWWMW TVèW H'YR FSR JIY, + +EY JSVFER HSRX PE QEMR HERW PI QIYVXVI IWX XVIQTéI, +EY PEVVSR GLEVKé H'SV UYM TECI IX UYM WSYVMX, +KVERH HMIY ! VIXSYVRI-XSM ZIVW RSYW, XêXI GSYTéI ! +MPW ZIRHIRX NéWYW-GLVMWX ! MPW ZIRHIRX NéWYW-GLVMWX ! + +MPW PMZVIRX EY FERHMX, TSYV UYIPUYIW WEGW WSVHMHIW, +P'éZERKMPI, PE PSM, P'EYXIP éTSYZERXé, +IX PE NYWXMGI EYB CIYB WéZèVIW IX GERHMHIW, +IX P'éXSMPI HY GSIYV LYQEMR, PE ZéVMXé ! + +PIW FSRW NIXéW, ZMZERXW, EY FEKRI, SY QSVXW, EYB JPIYZIW, +P'LSQQI NYWXI TVSWGVMX TEV GEVXSYGLI WCPPE, +P'MRRSGIRX éKSVKé, PI HIYMP WEGVé HIW ZIYZIW, +PIW TPIYVW HI P'SVTLIPMR, MPW ZIRHIRX XSYX GIPE ! + +XSYX ! PE JSM, PI WIVQIRX UYI HMIY XMIRX WSYW WE KEVHI, +PI WEMRX XIQTPI Sù, QSYVERX, XY HMW :MRXVSïFS, +MPW PMZVIRX XSYX ! TYHIYV, ZIVXY ! — QEVXCV, VIKEVHI, +VSYZVI XIW CIYB UY'IQTPMX PE PYIYV HY XSQFIEY ; — + +MPW ZIRHIRX P'EVGLI EYKYWXI Sù P'LSWXMI éXMRGIPPI ! +MPW ZIRHIRX GLVMWX, XI HMW-NI ! IX WIW QIQFVIW PMéW ! +MPW ZIRHIRX PE WYIYV UYM WYV WSR JVSRX VYMWWIPPI, +IX PIW GPSYW HI WIW QEMRW, IX PIW GPSYW HI WIW TMIHW ! + +MPW ZIRHIRX EY FVMKERH UYM GLID PYM PIW EXXMVI +PI KVERH GVYGMJMé WYV PIW LSQQIW TIRGLé ; +MPW ZIRHIRX WE TEVSPI, MPW ZIRHIRX WSR QEVXCVI, +IX XSR QEVXCVI à XSM TEV-HIWWYW PI QEVGLé ! + +XERX TSYV PIW GSYTW HI JSYIX UY'MP VIçYX à PE TSVXI ! +GéWEV ! XERX TSYV P'EQIR, XERX TSYV P'EPPéPYME ! +XERX TSYV PE TMIVVI Sù ZMRX LIYVXIV WE XêXI QSVXI ! +XERX TSYV PI HVET VSYKM UYI WE FEVFI IWWYCE ! + +MPW ZIRHIRX WIW KIRSYB QIYVXVMW, WE TEPQI ZIVXI, +WE TPEMI EY JPERG, WSR SIMP XSYX FEMKRé H'MRJMRM, +WIW TPIYVW, WSR EKSRMI, IX WE FSYGLI IRXVSYZIVXI, +IX PI GVM UY'MP TSYWWE : PEQQE WEFEGXLERM ! + +MPW ZIRHIRX PI WéTYPGVI ! MPW ZIRHIRX PIW XéRèFVIW ! +PIW WéVETLMRW GLERXERX EY WIYMP TVSJSRH HIW GMIYB, +IX PE QèVI HIFSYX WSYW P'EVFVI EYB FVEW JYRèFVIW, +UYM, WIRXERX Pà WSR JMPW, RI PIZEMX TEW PIW CIYB ! + +SYM, GIW éZêUYIW, SYM, GIW QEVGLERHW, SYM, GIW TVêXVIW +E P'LMWXVMSR HY GVMQI, EWWSYZM, GSYVSRRé, +E GI RéVSR VITY UYM VMX TEVQM PIW XVEîXVIW, +YR TMIH WYV XLVEWéEW, YR GSYHI WYV TLVCRé, + +EY ZSPIYV UYM XYE PIW PSMW à GSYTW HI GVSWWI, +EY TMVEXI IQTIVIYV RETSPéSR HIVRMIV, +MZVI HIYB JSMW, MQQSRHI IRGSV TPYW UYI JéVSGI, +TSYVGIEY HERW PI GPSEUYI IX PSYT HERW PI GLEVRMIV, + +MPW ZIRHIRX, ô QEVXCV, PI HMIY TIRWMJ IX TâPI +UYM, HIFSYX WYV PE XIVVI IX WSYW PI JMVQEQIRX, +XVMWXI IX RSYW WSYVMERX HERW RSXVI RYMX JEXEPI, +WYV PI RSMV KSPKSXLE WEMKRI éXIVRIPPIQIRX ! diff --git a/src/raw_file.py b/src/raw_file.py new file mode 100644 index 0000000..646d81a --- /dev/null +++ b/src/raw_file.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +from substitution import Substitution + + +def get_signature(filename): + with open(filename, 'rb') as fobj: + raw_bytes = fobj.read() + print(raw_bytes) + + +def detect_cipher(filename): + sub = Substitution() + with open(filename, 'r') as fobj: + try: + for line in fobj.readlines(): + sub.detectCipher(line) + except UnicodeDecodeError: + print(f"Cannot read the file {filename}") + + +get_signature("test.txt") + + +# Try with an RSA file encrypted +detect_cipher("tests/ciphertext.rsa") + +""" + Encrypting with RSA + $ openssl genrsa -out private.key 2048 + $ openssl rsa -in private.key -out public.pem -pubout + $ openssl rsautl -encrypt -inkey public.pem -pubin -in plaintext.txt > ciphertext +""" + +# Try with a ASCII file +detect_cipher("test.txt") diff --git a/src/substitution.py b/src/substitution.py new file mode 100644 index 0000000..3a9b954 --- /dev/null +++ b/src/substitution.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +from cipher import Cipher +import re + + +class Substitution(Cipher): + def __init__(self): + pass + + def detectCipher(self, data): + """ + Here, we are going to detect a succession of letters + """ + res = re.search("[a-zA-Z ]{1,}", data) + if res: + print(res.group(0)) + diff --git a/src/tests/ciphertext.rsa b/src/tests/ciphertext.rsa new file mode 100644 index 0000000000000000000000000000000000000000..51f60a19296ead95d63d1aaffff27fe3ec36d7d1 GIT binary patch literal 256 zcmV+b0ssD?fqQUz*OLF*5AvEq_j?&;z%oJvBq5QNl-^_4bfs` G6MB{gP