# coding: utf-8 from argparse import ArgumentParser import matplotlib.pyplot as plt from lorem import text as loremtext def checkArguments(): args = ArgumentParser(description='Cryptanalyst') args.add_argument('-f', '--filename', help='Text to analyze') args.add_argument('-s', '--stats', help='Statistics', action='store_true') args.add_argument('-d', '--decrypt', help='Decrypt Caesar text', action='store_true') return args.parse_args() def readCipherText(filename): file = [] with open(filename, 'r') as f: data = f.readlines() for entry in data: file.append(entry.strip()) return file def main(): args = checkArguments() cipherFile = None if args.filename: cipherFile = readCipherText(args.filename) if args.stats: stats(cipherFile) if args.decrypt: decryptCaesarText(cipherFile) def stats(file=None): if file is None: text = loremtext() else: text = file lettersOccurence = {} letterUpperToAscii = ord('A') # Get the ASCII code for i in range (0, 26): lettersOccurence[chr(i + letterUpperToAscii)] = 0 for line in text: 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)] y = [lettersOccurence[tmp] for tmp in lettersOccurence] largeur = 0.5 plt.bar(x, y, largeur) plt.show() def decryptCaesarText(cipherFile): if cipherFile is None: return letterAToAscii = ord('A') # Get the ASCII code letterZToAscii = ord('Z') # Get the ASCII code letteraToAscii = ord('a') # Get the ASCII code letterzToAscii = ord('z') # Get the ASCII code for key in range (0, 26): foo = [] for line in cipherFile: newLine = str() for letter in line: letter = letter.upper() l = ord(letter) if l >= letterAToAscii and l <= letterZToAscii: l = l - letterAToAscii res = ((l - key) % 26) + letterAToAscii newLine = newLine + chr(res) elif l >= letteraToAscii and l <= letterzToAscii: l = l - letteraToAscii res = ((l - key) % 26) + letteraToAscii newLine = newLine + chr(res) else: newLine = newLine + letter foo.append(newLine) print(f"key: {key}") print(foo) if __name__ == "__main__": main()