2022-2023/1NSI/10_Dictionnaire/scripts/cesar.py
Bertrand Benjamin 90558ac36b
All checks were successful
continuous-integration/drone/push Build is passing
Feat(NSI): exercices sur les dictionnaires
2023-03-26 16:40:46 +02:00

62 lines
2.2 KiB
Python

def chiffre_cesar(message:str, cle:int)->str:
"""
Chiffre un message avec le chiffrement par décalage sur les caractères imprimables ASCII.
:param message: le message à chiffrer
:param cle: décalage à appliquer
:return: le message chiffré
"""
message_chiffre = ""
for caractere in message:
caractere_chiffre = chr((ord(caractere) - 32 + cle) % 95 + 32)
message_chiffre += caractere_chiffre
return message_chiffre
def dechffre_cesar(message_chiffre:str, cle:int) -> str:
""" Déchiffre un message chiffré avec la méthode César"""
return chiffre_cesar(message_chiffre, -cle)
# On souhaite casser ce chiffrement c'est à dire trouver la clé de chiffrement
def signature(message: str) -> dict:
""" Compte le nombre d'occurrences de chaque caractère"""
# à compléter
pass
# Tests à ajouter
def caractere_plus_courant(message:str) -> str:
""" Donne le caractère le plus présent du message
En cas d'égalité, on renverra un des plus présent
"""
assert len(message) > 0
# à compléter
pass
# Ajouter deux tests
assert caractere_plus_courant("uiopyyy") == "y"
def decalage(caractere:str) -> int:
""" En supposant que caractere soit le caractère le plus présent du message, c'est certainement le caractère correspondant à l'espace. On peut donc calculer la clé"""
# à compléter
pass
# Tests (ajouter deux tests)
assert decalage("#") == 3
assert decalage("~") == 94
def trouve_cle(message_chiffre:str) -> int:
""" À partir d'un message chiffré, retrouve la clé"""
# à compléter
pass
def casse_cesar(message_chiffre:str) -> str:
""" À partir d'un message chiffré, déchiffre le message"""
# à compléter
pass
message = "Au théâtre, Victor Hugo s'est imposé comme un des chefs de file du romantisme français en présentant sa conception du drame romantique dans les préfaces qui introduisent Cromwell en 1827, puis Hernani en 1830, qui sont de véritables manifestes, puis par ses autres œuvres dramatiques, en particulier Lucrèce Borgia en 1833 et Ruy Blas en 1838."
# Dans la suite, chiffrer ce message puis essayer de casser le chiffrement avec votre fonction.