upd
This commit is contained in:
parent
c8aa211b6a
commit
16fa7489f9
3
src/__main__.py
Normal file
3
src/__main__.py
Normal file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
BIN
src/__pycache__/cipher.cpython-311.pyc
Normal file
BIN
src/__pycache__/cipher.cpython-311.pyc
Normal file
Binary file not shown.
BIN
src/__pycache__/substitution.cpython-311.pyc
Normal file
BIN
src/__pycache__/substitution.cpython-311.pyc
Normal file
Binary file not shown.
1
src/analysis/__init__.py
Normal file
1
src/analysis/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
#!/usr/bin/env python3
|
||||
3
src/analysis/__main__.py
Normal file
3
src/analysis/__main__.py
Normal file
@ -0,0 +1,3 @@
|
||||
#!/usr/Bin/env python3
|
||||
|
||||
|
||||
BIN
src/analysis/__pycache__/functions.cpython-39.pyc
Normal file
BIN
src/analysis/__pycache__/functions.cpython-39.pyc
Normal file
Binary file not shown.
25
src/analysis/functions.py
Normal file
25
src/analysis/functions.py
Normal file
@ -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
|
||||
66
src/analysis/getgrams.py
Normal file
66
src/analysis/getgrams.py
Normal file
@ -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()
|
||||
50
src/analysis/ic.py
Normal file
50
src/analysis/ic.py
Normal file
@ -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")
|
||||
11
src/cipher.py
Normal file
11
src/cipher.py
Normal file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
class Cipher:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def detectCipher(self, data):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
|
||||
61
src/cryptanalysis.py
Normal file
61
src/cryptanalysis.py
Normal file
@ -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()
|
||||
BIN
src/main
Executable file
BIN
src/main
Executable file
Binary file not shown.
51
src/main.c
Normal file
51
src/main.c
Normal file
@ -0,0 +1,51 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
|
||||
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);
|
||||
}*/
|
||||
|
||||
}
|
||||
139
src/poem.txt
Normal file
139
src/poem.txt
Normal file
@ -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 !
|
||||
139
src/poem.txt.crypt
Normal file
139
src/poem.txt.crypt
Normal file
@ -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 !
|
||||
36
src/raw_file.py
Normal file
36
src/raw_file.py
Normal file
@ -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")
|
||||
18
src/substitution.py
Normal file
18
src/substitution.py
Normal file
@ -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))
|
||||
|
||||
BIN
src/tests/ciphertext.rsa
Normal file
BIN
src/tests/ciphertext.rsa
Normal file
Binary file not shown.
27
src/tests/private.key
Normal file
27
src/tests/private.key
Normal file
@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEApc5mycmtCdX8OrGho7w8iRLUYyspRYoNO+3YeddOWdDaudBD
|
||||
bdcjIeMzVlqlPoa/FXMC8DwvbjwCt6GcJkJdJcWgFkiTiw4HXHx4bLO3/9ZRtlOK
|
||||
n1vyPRFK/S7JgoFiJsjppZl+iUbNOYmqWu1LURWNjLsUNIneS4SzqIrUqO55q+hf
|
||||
bUHByVy59E3XQ9IGK9tvDHSdKQFJw5Nv+0dR9sVUSc6rfYKI+/+9aN87YbaS6TKw
|
||||
b3F5Ig5FytOuMSCaIzAuivjCBSqgg4mtbIK10gcmPlmH00nngVxZpAHw8uotj28w
|
||||
5hZY9Am/ZxTZTZlVPyr6PYFFkHM7RwdG82xw7QIDAQABAoIBAQCXqev1ykdAxv64
|
||||
BYGQTv+kdpfVukY/OJ8QYWhxUtN1boiUDP+QuoiFV9i+tZ2PSxwAl7ppWvQbxkLK
|
||||
C8bUbEHd6h6cI3jqakOrgqN48w9ssnL97v7O9ADpgSbx3lkuygCo74BhHL1U/nF8
|
||||
nwM3tvT8z1UyFHHP+QhgVZssoQkTF88T4IQ4hii6EtfgltDfHKLfSfrFHWyNaXYc
|
||||
hKoixPjoYjxrm1UUpQvdNs6CY48AG65cgmXmDkeGN5HXvXEH/buUQmXDJYVoy5uD
|
||||
+qGohOi8Ssfi/kqVd7E7d5c7m87+Lh9pnELWwtvfa42pC1KfGjulyW3+11FxytiK
|
||||
soCEvT01AoGBANSv1q+MgWRSTogrdwzmpLmwBfy5FKxSCUZY83ViGz7dZFIOp4mI
|
||||
fmXEizkPe/DHwlr7LpO5GFNgqasVkS9ghwu9Tn9kCG5WAJ7FG7w1VDWraIKHq8uW
|
||||
clfKcq5kUkc1k4idDYvG4lD7QiBTYPY7Ud7dGfk1qNgEN45qfnXGplBDAoGBAMeS
|
||||
gFVr2/5ncuZxj6Sb/RkwAizG46n0lZCPEd5j5eH96S5YajsqZE9YojL1QjK33qjH
|
||||
kOk676GJSIWL9HD2xjfkSEtQwgqfzInT0uAopZxPLICya5aH3SpdDhEyNEiBixQZ
|
||||
UzAKBwWz9+cS8mdD6kLcMkWMdmp1tI6f2wfZKf8PAoGAZIu0DE16JfkbExipMTog
|
||||
CYCDdBPzB/vIUq9eeNGmW7PB52DyJvyV9HpT7ue5Cf0FjolMXZ2VOGVsEGsjtagG
|
||||
b7BQ2bxql+6kYGqCUBlN9AlSYNLOjnJTH9mfGX5nvy4+zsigTMH635nIiwufvQgS
|
||||
Di+sRbnuViC4OuVxXzBIE40CgYBu+cVJOugjaK0Y/c8NjvxH9E1RTuusR2if8R7T
|
||||
lqNvbr0q21l/Owx6nuPbCEzeXSaAnjCzsOUt42QjdvbflioVTGjzEJ5GQCQCBHs/
|
||||
0Pp+l/w8OHrhQv22H/bBkzRFmVuYOpjqnrjW8AOLSBrpV3e95CpESF5Uxs03fibT
|
||||
D2xt+wKBgQCAn6Gufh1XmeQwebqRLd2spgI3hs+7AUcY/gLvVDjQRplTK07QpD34
|
||||
NN2CrkW8iKxBM8MgQVzJPAwYtCVpSwuei7S+frtquEKl04kAB9jKw6ez2ur5vvut
|
||||
1jCFT7wRPNDPB3q9NKVylz1R8JvAts7GViTphlUXFPSBlORrBBbUdg==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
27
src/tests/public.key
Normal file
27
src/tests/public.key
Normal file
@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEApc5mycmtCdX8OrGho7w8iRLUYyspRYoNO+3YeddOWdDaudBD
|
||||
bdcjIeMzVlqlPoa/FXMC8DwvbjwCt6GcJkJdJcWgFkiTiw4HXHx4bLO3/9ZRtlOK
|
||||
n1vyPRFK/S7JgoFiJsjppZl+iUbNOYmqWu1LURWNjLsUNIneS4SzqIrUqO55q+hf
|
||||
bUHByVy59E3XQ9IGK9tvDHSdKQFJw5Nv+0dR9sVUSc6rfYKI+/+9aN87YbaS6TKw
|
||||
b3F5Ig5FytOuMSCaIzAuivjCBSqgg4mtbIK10gcmPlmH00nngVxZpAHw8uotj28w
|
||||
5hZY9Am/ZxTZTZlVPyr6PYFFkHM7RwdG82xw7QIDAQABAoIBAQCXqev1ykdAxv64
|
||||
BYGQTv+kdpfVukY/OJ8QYWhxUtN1boiUDP+QuoiFV9i+tZ2PSxwAl7ppWvQbxkLK
|
||||
C8bUbEHd6h6cI3jqakOrgqN48w9ssnL97v7O9ADpgSbx3lkuygCo74BhHL1U/nF8
|
||||
nwM3tvT8z1UyFHHP+QhgVZssoQkTF88T4IQ4hii6EtfgltDfHKLfSfrFHWyNaXYc
|
||||
hKoixPjoYjxrm1UUpQvdNs6CY48AG65cgmXmDkeGN5HXvXEH/buUQmXDJYVoy5uD
|
||||
+qGohOi8Ssfi/kqVd7E7d5c7m87+Lh9pnELWwtvfa42pC1KfGjulyW3+11FxytiK
|
||||
soCEvT01AoGBANSv1q+MgWRSTogrdwzmpLmwBfy5FKxSCUZY83ViGz7dZFIOp4mI
|
||||
fmXEizkPe/DHwlr7LpO5GFNgqasVkS9ghwu9Tn9kCG5WAJ7FG7w1VDWraIKHq8uW
|
||||
clfKcq5kUkc1k4idDYvG4lD7QiBTYPY7Ud7dGfk1qNgEN45qfnXGplBDAoGBAMeS
|
||||
gFVr2/5ncuZxj6Sb/RkwAizG46n0lZCPEd5j5eH96S5YajsqZE9YojL1QjK33qjH
|
||||
kOk676GJSIWL9HD2xjfkSEtQwgqfzInT0uAopZxPLICya5aH3SpdDhEyNEiBixQZ
|
||||
UzAKBwWz9+cS8mdD6kLcMkWMdmp1tI6f2wfZKf8PAoGAZIu0DE16JfkbExipMTog
|
||||
CYCDdBPzB/vIUq9eeNGmW7PB52DyJvyV9HpT7ue5Cf0FjolMXZ2VOGVsEGsjtagG
|
||||
b7BQ2bxql+6kYGqCUBlN9AlSYNLOjnJTH9mfGX5nvy4+zsigTMH635nIiwufvQgS
|
||||
Di+sRbnuViC4OuVxXzBIE40CgYBu+cVJOugjaK0Y/c8NjvxH9E1RTuusR2if8R7T
|
||||
lqNvbr0q21l/Owx6nuPbCEzeXSaAnjCzsOUt42QjdvbflioVTGjzEJ5GQCQCBHs/
|
||||
0Pp+l/w8OHrhQv22H/bBkzRFmVuYOpjqnrjW8AOLSBrpV3e95CpESF5Uxs03fibT
|
||||
D2xt+wKBgQCAn6Gufh1XmeQwebqRLd2spgI3hs+7AUcY/gLvVDjQRplTK07QpD34
|
||||
NN2CrkW8iKxBM8MgQVzJPAwYtCVpSwuei7S+frtquEKl04kAB9jKw6ez2ur5vvut
|
||||
1jCFT7wRPNDPB3q9NKVylz1R8JvAts7GViTphlUXFPSBlORrBBbUdg==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
9
src/tests/public.pem
Normal file
9
src/tests/public.pem
Normal file
@ -0,0 +1,9 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApc5mycmtCdX8OrGho7w8
|
||||
iRLUYyspRYoNO+3YeddOWdDaudBDbdcjIeMzVlqlPoa/FXMC8DwvbjwCt6GcJkJd
|
||||
JcWgFkiTiw4HXHx4bLO3/9ZRtlOKn1vyPRFK/S7JgoFiJsjppZl+iUbNOYmqWu1L
|
||||
URWNjLsUNIneS4SzqIrUqO55q+hfbUHByVy59E3XQ9IGK9tvDHSdKQFJw5Nv+0dR
|
||||
9sVUSc6rfYKI+/+9aN87YbaS6TKwb3F5Ig5FytOuMSCaIzAuivjCBSqgg4mtbIK1
|
||||
0gcmPlmH00nngVxZpAHw8uotj28w5hZY9Am/ZxTZTZlVPyr6PYFFkHM7RwdG82xw
|
||||
7QIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
10
src/transposition.py
Normal file
10
src/transposition.py
Normal file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from cipher import Cipher
|
||||
|
||||
class Transposition(Cipher):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def detectCipher(self, data):
|
||||
pass
|
||||
Loading…
Reference in New Issue
Block a user