106 lines
2.5 KiB
Python
106 lines
2.5 KiB
Python
def lecture(nom : str) -> str:
|
|
"""get all character of a file
|
|
|
|
:nom: file name
|
|
:returns: string of the file's content
|
|
|
|
"""
|
|
with open(nom, 'r') as file:
|
|
return file.read()
|
|
|
|
|
|
def nettoyage(texte : str) -> str:
|
|
"""clean the text from it's space and uppsercase
|
|
|
|
:texte: Sentence to cclean
|
|
:returns: the string cleaned
|
|
|
|
"""
|
|
texte = texte.lower()
|
|
alphabet = 'abcdefghijklmnopqrstuvwxyz'
|
|
ret = ''
|
|
for char in texte:
|
|
if char in alphabet:
|
|
ret += char
|
|
return ret
|
|
|
|
|
|
def chiffrement_decalage(texte : str, u : int) -> str:
|
|
"""Encrypt a string with cesar
|
|
|
|
:texte: String to encrypt
|
|
:u: Key for ceasar encryption
|
|
:returns: encrypted text
|
|
|
|
"""
|
|
alphabet = 'abcdefghijklmnopqrstuvwxyz'
|
|
decalage = dict()
|
|
for k, l in enumerate(alphabet):
|
|
decalage[l] = alphabet[(k+u) % len(alphabet)]
|
|
ret = ''
|
|
for l in texte:
|
|
ret += decalage[l]
|
|
return ret
|
|
|
|
|
|
def dechiffrement_decalage(texte, u):
|
|
"""decrypt text encoded with cesar
|
|
|
|
:texte: the string to decode
|
|
:u: ceasar key to decode
|
|
:returns: the string decoded with the key
|
|
|
|
"""
|
|
return chiffrement_decalage(texte, -u)
|
|
|
|
|
|
def chiffrement_substitution(texte, dico):
|
|
ret = ''
|
|
for l in texte:
|
|
if l in dico:
|
|
ret += dico[l]
|
|
else:
|
|
ret += l
|
|
return ret
|
|
|
|
|
|
def dechiffrement_substitution(texte, dico):
|
|
invert = dict()
|
|
for k, v in dico.items():
|
|
invert[v] = k
|
|
return chiffrement_substitution(texte, invert)
|
|
|
|
|
|
|
|
def file_to_dict(filename):
|
|
ret = dict()
|
|
with open(filename) as f:
|
|
for l in f:
|
|
ret[l.split()[0]] = l.split()[1]
|
|
return ret
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
if(len(sys.argv) == 5):
|
|
if sys.argv[1] == 'd':
|
|
if sys.argv[2] == 'c':
|
|
text = nettoyage(lecture(sys.argv[3]))
|
|
print(chiffrement_decalage(text, int(sys.argv[4])))
|
|
if sys.argv[2] == 'd':
|
|
text = nettoyage(lecture(sys.argv[3]))
|
|
print(dechiffrement_decalage(text, sys.argv[4]))
|
|
|
|
if sys.argv[1] == 's':
|
|
if sys.argv[2] == 'c':
|
|
text = nettoyage(lecture(sys.argv[3]))
|
|
dico = file_to_dict(sys.argv[4])
|
|
print(chiffrement_substitution(text, dico))
|
|
if sys.argv[2] == 'd':
|
|
text = nettoyage(lecture(sys.argv[3]))
|
|
dico = file_to_dict(sys.argv[4])
|
|
print(dechiffrement_substitution(text, dico))
|
|
|
|
|