PROFIL / INDEX© Clément Depernet / 2026

← Retour à la liste

29 oct. 20242 min de lecture

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.

intro#cryptographie#cryptanalyse#cheatsheet#ctf#python

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.

SEC / OPS / CD-01

Astro + Tailwind, conteneurisé, servi derrière Caddy · Inspiration · Thème sonore : Severance (Theodore Shapiro) · Trop mignon le favicon, non ?

PRÊT / CD-01