This commit is contained in:
geoffrey 2026-03-01 21:07:14 +01:00
parent c8aa211b6a
commit 16fa7489f9
22 changed files with 676 additions and 0 deletions

3
src/__main__.py Normal file

@ -0,0 +1,3 @@
#!/usr/bin/env python3

Binary file not shown.

Binary file not shown.

1
src/analysis/__init__.py Normal file

@ -0,0 +1 @@
#!/usr/bin/env python3

3
src/analysis/__main__.py Normal file

@ -0,0 +1,3 @@
#!/usr/Bin/env python3

Binary file not shown.

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

@ -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

@ -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

@ -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

@ -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

Binary file not shown.

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

@ -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

@ -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

@ -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

@ -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

Binary file not shown.

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

@ -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

@ -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

@ -0,0 +1,10 @@
#!/usr/bin/env python3
from cipher import Cipher
class Transposition(Cipher):
def __init__(self):
pass
def detectCipher(self, data):
pass