ajout de tous les cours et TP préparés cet été
This commit is contained in:
115
Sécurité/exemples/substitution_polyalphabetique.py
Executable file
115
Sécurité/exemples/substitution_polyalphabetique.py
Executable file
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Wed Feb 16 12:30:05 2022
|
||||
|
||||
@author: pjoulaud
|
||||
"""
|
||||
|
||||
PREM_CARAC = ord('A') - 1
|
||||
DER_CARAC = ord('Z')
|
||||
#PREM_CARAC = 32
|
||||
#DER_CARAC = 126
|
||||
#PREM_CARAC = 0x21
|
||||
#DER_CARAC = 0x1f0df
|
||||
MODULO = DER_CARAC - PREM_CARAC
|
||||
|
||||
def codage_cle_chiffrement(chaine_a_coder, cle):
|
||||
"""
|
||||
Fonction de codage par substitution polyalphabetique
|
||||
Arguments :
|
||||
- chaine_a_coder : Message à coder de type str
|
||||
- cle : clé de chiffrement de type str
|
||||
Retourne :
|
||||
- chaine_chiffree : Message codé de type str
|
||||
>>> codage_cle_chiffrement("JE TIENS ENFIN LA GAULE", "SCIENCE")
|
||||
'CH CNSQX XQONB OF ZDDQS'
|
||||
"""
|
||||
chaine_chiffree = ""
|
||||
i = 0
|
||||
for car in chaine_a_coder :
|
||||
if car != " ":
|
||||
ord_car = ord(car) - PREM_CARAC
|
||||
ord_cle = ord(cle[i%len(cle)]) - PREM_CARAC
|
||||
sum_ord = ord_car + ord_cle
|
||||
#print(f"car : {car} - ord_car : {ord_car} - ord_cle : {ord_cle} - sum_ord : {sum_ord} - ")
|
||||
if sum_ord <= MODULO :
|
||||
car2 = chr(PREM_CARAC + sum_ord)
|
||||
else :
|
||||
car2 = chr(PREM_CARAC + sum_ord%MODULO)
|
||||
i += 1
|
||||
else :
|
||||
car2 = car
|
||||
chaine_chiffree += car2
|
||||
return chaine_chiffree
|
||||
|
||||
def car_to_num(c):
|
||||
return ord(c) - PREM_CARAC
|
||||
|
||||
def num_to_car(n):
|
||||
if n <= MODULO :
|
||||
return chr(PREM_CARAC + n)
|
||||
else :
|
||||
return chr(PREM_CARAC + n%MODULO)
|
||||
|
||||
def codage_cle_chiffrement2(chaine_a_coder, cle):
|
||||
"""
|
||||
Fonction de codage par substitution polyalphabetique - 2e version
|
||||
Passe par deux fonctions (car_to_num et num_to_car) pour convertir
|
||||
de caractères vers valeur numérique et vice-versa.
|
||||
Arguments :
|
||||
- chaine_a_coder : Message à coder de type str
|
||||
- cle : clé de chiffrement de type str
|
||||
Retourne :
|
||||
- chaine_chiffree : Message codé de type str
|
||||
>>> codage_cle_chiffrement2("JE TIENS ENFIN LA GAULE", "SCIENCE")
|
||||
'CH CNSQX XQONB OF ZDDQS'
|
||||
"""
|
||||
chaine_chiffree = ""
|
||||
i = 0
|
||||
for car in chaine_a_coder :
|
||||
if car != " ":
|
||||
ord_car = car_to_num(car)
|
||||
ord_cle = car_to_num(cle[i%len(cle)])
|
||||
sum_ord = ord_car + ord_cle
|
||||
#print(f"car : {car} - ord_car : {ord_car} - ord_cle : {ord_cle} - sum_ord : {sum_ord} - ")
|
||||
car2 = num_to_car(sum_ord)
|
||||
i += 1
|
||||
else :
|
||||
car2 = car
|
||||
chaine_chiffree += car2
|
||||
return chaine_chiffree
|
||||
|
||||
def decodage_cle_chiffrement(chaine_codee, cle):
|
||||
"""
|
||||
Fonction de décodage par substitution polyalphabetique
|
||||
Arguments :
|
||||
- chaine_codee : Message codé de type str
|
||||
- cle : clé de chiffrement de type str
|
||||
Retourne :
|
||||
- chaine_clair : Message décodé de type str
|
||||
>>> decodage_cle_chiffrement(codage_cle_chiffrement("JE TIENS ENFIN LA GAULE", "SCIENCE"), "SCIENCE")
|
||||
'JE TIENS ENFIN LA GAULE'
|
||||
"""
|
||||
chaine_clair = ""
|
||||
i = 0
|
||||
for car in chaine_codee :
|
||||
if car != " ":
|
||||
ord_car = ord(car) - PREM_CARAC
|
||||
ord_cle = ord(cle[i%len(cle)]) - PREM_CARAC
|
||||
sum_ord = ord_car - ord_cle + MODULO
|
||||
#print(f"car : {car} - ord_car : {ord_car} - ord_cle : {ord_cle} - sum_ord : {sum_ord} - ")
|
||||
if sum_ord <= MODULO :
|
||||
car2 = chr(PREM_CARAC + sum_ord)
|
||||
else :
|
||||
car2 = chr(PREM_CARAC + sum_ord%MODULO)
|
||||
i += 1
|
||||
else :
|
||||
car2 = car
|
||||
chaine_clair += car2
|
||||
return chaine_clair
|
||||
|
||||
#CORPS DE PROGRAMME
|
||||
if __name__=='__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
Reference in New Issue
Block a user