Update scripts
This commit is contained in:
parent
61e8de0483
commit
f95807a90f
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
__pycache__/**
|
25
functions.py
Normal file
25
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
|
15
ic.py
15
ic.py
@ -1,8 +1,7 @@
|
|||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from unidecode import unidecode
|
from functions import readFile, countLetters
|
||||||
from re import sub
|
|
||||||
|
|
||||||
|
|
||||||
def checkArguments():
|
def checkArguments():
|
||||||
@ -14,18 +13,10 @@ def main():
|
|||||||
args = checkArguments()
|
args = checkArguments()
|
||||||
|
|
||||||
# Read file
|
# Read file
|
||||||
dataFile = str()
|
dataFile = readFile(args.filename)
|
||||||
with open(args.filename, 'r') as f:
|
|
||||||
data = f.readlines()
|
|
||||||
|
|
||||||
for d in data:
|
|
||||||
u = unidecode(d.lower(), 'utf-8')
|
|
||||||
dataFile += sub(r'[^a-z]', '', u)
|
|
||||||
|
|
||||||
# Get number of letters
|
# Get number of letters
|
||||||
totalLetters = 0
|
totalLetters = countLetters(dataFile)
|
||||||
for letter in dataFile:
|
|
||||||
totalLetters += 1
|
|
||||||
|
|
||||||
counts = []
|
counts = []
|
||||||
|
|
||||||
|
156
main.py
156
main.py
@ -3,107 +3,101 @@
|
|||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from lorem import text as loremtext
|
from lorem import text as loremtext
|
||||||
|
from functions import readFile
|
||||||
|
|
||||||
|
|
||||||
def checkArguments():
|
def checkArguments():
|
||||||
args = ArgumentParser(description='Cryptanalyst')
|
args = ArgumentParser(description='Cryptanalyst')
|
||||||
args.add_argument('-f', '--filename', help='Text to analyze')
|
args.add_argument('-f', '--filename', help='Text to analyze')
|
||||||
args.add_argument('-s', '--stats', help='Statistics', action='store_true')
|
args.add_argument('-s', '--stats', help='Statistics', action='store_true')
|
||||||
args.add_argument('-d', '--decrypt', help='Decrypt Caesar text', action='store_true')
|
args.add_argument('-d', '--decrypt', help='Decrypt Caesar text', action='store_true')
|
||||||
return args.parse_args()
|
return args.parse_args()
|
||||||
|
|
||||||
def readCipherText(filename):
|
|
||||||
"""
|
|
||||||
This read the file passed in argument and return the data of it
|
|
||||||
"""
|
|
||||||
file = []
|
|
||||||
with open(filename, 'r') as f:
|
|
||||||
data = f.readlines()
|
|
||||||
|
|
||||||
for entry in data:
|
|
||||||
file.append(entry.strip())
|
|
||||||
|
|
||||||
return file
|
|
||||||
|
|
||||||
def stats(file=None):
|
def stats(file=None):
|
||||||
"""
|
"""
|
||||||
This function get a stats of all letter occurrence in a text
|
This function get a stats of all letter occurrence in a text
|
||||||
"""
|
"""
|
||||||
if file is None:
|
if file is None:
|
||||||
text = loremtext()
|
dataFile = loremtext()
|
||||||
else:
|
else:
|
||||||
text = file
|
dataFile = file
|
||||||
|
|
||||||
lettersOccurence = {}
|
#dataFile = str()
|
||||||
letterUpperToAscii = ord('A') # Get the ASCII code
|
#for d in text:
|
||||||
for i in range (0, 26):
|
# u = unidecode(d.lower(), 'utf-8')
|
||||||
lettersOccurence[chr(i + letterUpperToAscii)] = 0
|
# dataFile += sub(r'[^a-z]', '', u)
|
||||||
|
|
||||||
for line in text:
|
lettersOccurence = []
|
||||||
for letter in line:
|
|
||||||
letter = letter.upper()
|
|
||||||
if letter in lettersOccurence:
|
|
||||||
lettersOccurence[letter] = lettersOccurence[letter] + 1
|
|
||||||
|
|
||||||
x = [chr(letter + 65) for letter in range(0, 26)]
|
# Init our tab
|
||||||
y = [lettersOccurence[tmp] for tmp in lettersOccurence]
|
for i in range (0, 26):
|
||||||
|
lettersOccurence.append(0)
|
||||||
|
|
||||||
largeur = 0.5
|
letterToAscii = ord('a') # Get the ASCII code
|
||||||
plt.bar(x, y, largeur)
|
for letter in dataFile:
|
||||||
plt.show()
|
l = ord(letter) - letterToAscii
|
||||||
|
if l >= 0 and l <= 26:
|
||||||
|
lettersOccurence[l] += 1
|
||||||
|
|
||||||
|
x = [chr(letter + 65) for letter in range(0, 26)]
|
||||||
|
y = [tmp for tmp in lettersOccurence]
|
||||||
|
|
||||||
|
largeur = 0.5
|
||||||
|
plt.bar(x, y, largeur)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
def decryptCaesarText(cipherFile):
|
def decryptCaesarText(cipherFile):
|
||||||
"""
|
"""
|
||||||
This function breach the caesar ciphertext with all key
|
This function breach the caesar ciphertext with all key
|
||||||
"""
|
"""
|
||||||
if cipherFile is None:
|
if cipherFile is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
letterAToAscii = ord('A') # Get the ASCII code
|
letterAToAscii = ord('A') # Get the ASCII code
|
||||||
letterZToAscii = ord('Z') # Get the ASCII code
|
letterZToAscii = ord('Z') # Get the ASCII code
|
||||||
letteraToAscii = ord('a') # Get the ASCII code
|
letteraToAscii = ord('a') # Get the ASCII code
|
||||||
letterzToAscii = ord('z') # Get the ASCII code
|
letterzToAscii = ord('z') # Get the ASCII code
|
||||||
for key in range (0, 26):
|
for key in range (0, 26):
|
||||||
foo = []
|
foo = []
|
||||||
for line in cipherFile:
|
for line in cipherFile:
|
||||||
newLine = str()
|
newLine = str()
|
||||||
for letter in line:
|
for letter in line:
|
||||||
letter = letter.upper()
|
letter = letter.upper()
|
||||||
letterAscii = ord(letter)
|
letterAscii = ord(letter)
|
||||||
if letterAscii >= letterAToAscii and letterAscii <= letterZToAscii:
|
if letterAscii >= letterAToAscii and letterAscii <= letterZToAscii:
|
||||||
newLetter = getNewLetter(letterAscii, letterAToAscii, key)
|
newLetter = getNewLetter(letterAscii, letterAToAscii, key)
|
||||||
elif letterAscii >= letteraToAscii and letterAscii <= letterzToAscii:
|
elif letterAscii >= letteraToAscii and letterAscii <= letterzToAscii:
|
||||||
newLetter = getNewLetter(letteraToAscii, key)
|
newLetter = getNewLetter(letteraToAscii, key)
|
||||||
else:
|
else:
|
||||||
newLetter = letter
|
newLetter = letter
|
||||||
|
|
||||||
newLine = newLine + newLetter
|
newLine = newLine + newLetter
|
||||||
|
|
||||||
foo.append(newLine)
|
foo.append(newLine)
|
||||||
|
|
||||||
print(f"key: {key}")
|
print(f"key: {key}")
|
||||||
print(foo)
|
print(foo)
|
||||||
|
|
||||||
def getNewLetter(letterAscii, letterToAscii, key):
|
def getNewLetter(letterAscii, letterToAscii, key):
|
||||||
"""
|
"""
|
||||||
This function return the new letter and we substract with the key.
|
This function return the new letter and we substract with the key.
|
||||||
The function return the new letter into a char
|
The function return the new letter into a char
|
||||||
"""
|
"""
|
||||||
letterAscii = letterAscii - letterToAscii
|
letterAscii = letterAscii - letterToAscii
|
||||||
res = ((letterAscii - key) % 26) + letterToAscii
|
res = ((letterAscii - key) % 26) + letterToAscii
|
||||||
return chr(res)
|
return chr(res)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = checkArguments()
|
args = checkArguments()
|
||||||
cipherFile = None
|
cipherFile = None
|
||||||
|
|
||||||
if args.filename:
|
if args.filename:
|
||||||
cipherFile = readCipherText(args.filename)
|
cipherFile = readFile(args.filename)
|
||||||
|
|
||||||
if args.stats:
|
if args.stats:
|
||||||
stats(cipherFile)
|
stats(cipherFile)
|
||||||
if args.decrypt:
|
if args.decrypt:
|
||||||
decryptCaesarText(cipherFile)
|
decryptCaesarText(cipherFile)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user