Cheat sheet — Cryptographie classique (César, Vigenère, XOR, analyse de fréquence)
Les chiffrements historiques et leur cryptanalyse : substitution de César, Vigenère polyalphabétique, chiffrement XOR et ses pièges, et l'analyse de fréquence qui casse les substitutions monoalphabétiques.
Mis à jour le 21 sept. 2026
Chiffre de César
Substitution simple : chaque lettre est décalée d’un nombre fixe de positions.
Avec un décalage de 3, A → D, HELLO → KHOOR.
def caesar_cipher(message, shift):
out = ""
for char in message:
if char.isalpha():
offset = 65 if char.isupper() else 97
out += chr((ord(char) - offset + shift) % 26 + offset)
else:
out += char
return out
encrypted = caesar_cipher("HELLO", 3) # KHOOR
decrypted = caesar_cipher(encrypted, -3) # HELLO
Faiblesse : 26 décalages possibles seulement → force brute immédiate.
for shift in range(26):
print(f"Décalage {shift}: {caesar_cipher('KHOOR', -shift)}")
Chiffre de Vigenère
Substitution polyalphabétique : une clé répétée donne le décalage de chaque
lettre (A=0, B=1, …). Bien plus résistant que César tant que la clé est
longue et sans motif.
Message HELLO, clé KEY répétée en KEYKE :
| Clair | H | E | L | L | O |
|---|---|---|---|---|---|
| Clé | K (+10) | E (+4) | Y (+24) | K (+10) | E (+4) |
| Chiffré | R | I | J | V | S |
Déchiffrement : même procédé avec le décalage inverse.
Chiffrement XOR
Chaque bit du clair est XORé avec un bit de clé. Opération symétrique : l’appliquer deux fois avec la même clé redonne le clair.
def xor_cipher(message, key):
return "".join(chr(ord(c) ^ ord(key[i % len(key)])) for i, c in enumerate(message))
enc = xor_cipher("HELLO", "KEY")
dec = xor_cipher(enc, "KEY") # HELLO
Sûr uniquement si la clé est aussi longue que le message et jamais réutilisée (one-time pad). Une clé courte et répétée se casse par analyse de motifs.
Analyse de fréquence
Pour casser une substitution monoalphabétique : comparer la fréquence des lettres du chiffré avec celle de la langue cible.
| Lettre | Français | Anglais |
|---|---|---|
| E | 14.7 % | 12.7 % |
| A | 7.6 % | 8.2 % |
| S | 7.9 % | 6.5 % |
| T | 7.0 % | 9.1 % |
| I | 7.5 % | 7.0 % |
| N | 7.1 % | 6.7 % |
La lettre la plus fréquente du chiffré correspond probablement au E. L’écart
donne le décalage : si S domine un texte anglais, S → E = décalage de 4,
et LIPPS ASVPH → HELLO WORLD.
Limites : il faut un texte assez long, et la méthode échoue sur les chiffres polyalphabétiques (Vigenère), où une même lettre claire est chiffrée différemment selon sa position.