En cryptographie, le chiffrement par décalage, aussi connu comme le chiffre de César, est une méthode de chiffrement très simple utilisée par Jules César dans ses correspondances secrètes (ce qui explique son nom).
Le texte chiffré s'obtient en remplaçant chaque lettre du texte clair original par une lettre à distance fixe, toujours du même côté, dans l'ordre de l'alphabet. Pour les dernières lettres (dans le cas d'un décalage à droite), on reprend au début. Par exemple avec un décalage de 3 vers la droite, A est remplacé par D, B devient E, et ainsi jusqu'à W qui devient Z, puis X devient A, etc. Il s'agit d'une permutation circulaire de l'alphabet. La longueur du décalage, 3 dans l'exemple évoqué, constitue la clé du chiffrement qu'il suffit de transmettre au destinataire — s'il sait déjà qu'il s'agit d'un chiffrement de César — pour que celui-ci puisse déchiffrer le message. Dans le cas de l'alphabet latin, le chiffre de César n'a que 26 clés possibles (y compris la clé nulle, qui ne modifie pas le texte).
Il s'agit d'un cas particulier de chiffrement par substitution monoalphabétique : ces substitutions reposent sur un principe analogue, mais sont obtenues par des permutations quelconques des lettres de l'alphabet. Dans le cas général, la clé est donnée par la permutation, et le nombre de clés possibles est alors sans commune mesure avec celui des chiffrements de César.
Le chiffrement de César peut être utilisé comme élément d'une méthode plus complexe, comme le chiffre de Vigenère. Seul, il n'offre aucune sécurité de communication, à cause du très faible nombre de clés qui permet de les essayer systématiquement et rapidement, quand la méthode de chiffrement est connue, mais aussi parce que, comme tout encodage par substitution monoalphabétique, il peut être très rapidement « cassé » par analyse de fréquences (certaines lettres apparaissent beaucoup plus souvent que les autres dans une langue naturelle).
Écrire un programme en Python qui demande à l'utilisateur la chaîne de caractères (uniquement des caractères de l'alphabet latin en minuscules sans blanc, dans un premier temps) qu'il désire chiffrer et le décalage qu'il souhaite opérer, ou la chaîne de caractères qu'il souhaite déchiffrer ainsi que le décalage qui a été utilisé pour chiffrer la chaîne originale.
Le programme retourne alors la chaîne de caractères traitée.
Remarque 1. Il existe plusieurs façon de coder le problème proposé et surtout plusieurs structures de données sont utilisables. Avant de se lancer dans le codage, réfléchir à la structure de données qui semblera la plus pertinente.
Remarque 2. Le programme doit comporter trois fonctions :
main
dans laquelle l'interaction avec l'utilisateur est établie. C'est depuis cette fonction que l'on appelle les deux fonctions suivantes.chiffrement
dont la signature est : def chiffrement(chaine: str, decalage: int) -> str:
"""
Fonction qui réalise le chiffrement de la chaîne passée en argument.
Algorithme utilisé
------------------
xxxxxx
"""
Les xxxxx devront être remplacés lorsque l'algorithme aura été établi.
dechiffrement
dont la signature est :xdef dechiffrement(chaine: str, decalage: int) -> str:
"""
Fonction qui réalise le déchiffrement de la chaîne passée en argument.
Algorithme utilisé
------------------
xxxxxxxx
"""
Les xxxxx devront être remplacés lorsque l'algorithme aura été établi.
Facultatif mais utile pour la suite. Modifier le programme précédent de façon à ce qu'il utilise l'opérateur modulo
Modifier le programme précédent de façon à ce que l'utilisateur ne donne pas la valeur du décalage mais un mot clé. Le programme doit alors calculer le décalage à opérer à partir de la longueur de ce mot clé.
Remarque. Écrire une fonction qui réalise cette opération.
Modifier les programmes précédents de façon à ce que les majuscules et les blancs soient pris en compte.