Table des matières
Description
Un petit challenge de décodage d’une phrase. Une recherche google et une lecture wikipedia du Vigénère pour avoir la formule de codage/décodage.
En désignant la ie lettre du texte clair par Texte[i]
, la ie du chiffré par Chiffré[i]
, et la ie lettre de la clé, répétée suffisamment de fois, par Clés[i]
, elle se formalise par :
Chiffré[i] = (Texte[i] + Clés[i]) modulo 26
Texte[i] = (Chiffré[i] - Clés[i]) modulo 26
Solution
import string
list_alpha = list(string.ascii_lowercase)
print(list_alpha)
print("hackropole1")
str_to_decode = """Gqfltwj emgj clgfv ! Aqltj rjqhjsksg ekxuaqs, ua xtwk
n'feuguvwb gkwp xwj, ujts f'npxkqvjgw nw tjuwcz
ugwygjtfkf qz uw efezg sqk gspwonu. Jgsfwb-aqmu f
Pspygk nj 29 cntnn hqzt dg igtwy fw xtvjg rkkunqf."""
key = "FCSC"
# Chiffré[i] = (Texte[i] + Clés[i]) modulo 26
# Texte[i] = (Chiffré[i] - Clés[i]) modulo 26
def crypte(text, key):
coded_str = ""
delta = 0
for i in range(0, len(text)):
if text[i].lower() not in list_alpha:
coded_str += text[i]
delta+=1
continue
letter_index = (list_alpha.index(text[i].lower()) + list_alpha.index(key[i%len(key)-delta%len(key)].lower())) % 26
letter = list_alpha[letter_index]
coded_str += letter
return coded_str
def decrypte(text, key):
decoded_str = ""
delta = 0
for i in range(0, len(text)):
if text[i].lower() not in list_alpha:
decoded_str += text[i]
delta+=1
continue
letter_index = (list_alpha.index(text[i].lower()) - list_alpha.index(key[i%len(key)-delta%len(key)].lower())) % 26
letter = list_alpha[letter_index]
decoded_str += letter
return decoded_str
result = decrypte(str_to_decode, key)
print(result)
print(crypte(result, key))