Exemples de code affine
Apprendre le chiffre affine est plus facile avec des exemples pratiques. Cette page fournit des démonstrations de chiffrement et de déchiffrement étape par étape, un code Python complet et des problèmes pratiques pour tester votre compréhension.
Exemple de chiffrement de base
Let's chiffre le mot "HELLO" en utilisant les touches A=5 et B=8:
Étape 1: Convertir les lettres en nombres (A=0, B=1,..., Z=25)
- H=7, E=4, L=11, L=11, O=14
Étape 2: Appliquer la formule de chiffrement E(x) = (5x + 8) mod 26
- H: (5×7 + 8) mod 26 = 43 mod 26 = 17 = R
- E: (5×4 + 8) mod 26 = 28 mod 26 = 2 = C
- L: (5×11 + 8) mod 26 = 63 mod 26 = 11 = L
- L: (5×11 + 8) mod 26 = 63 mod 26 = 11 = L
- O: (5×14 + 8) mod 26 = 78 mod 26 = 0 = A
Résultat: HELLO → RCLLA
Exemple de déchiffrement
Pour déchiffrer "RCLLA" avec A=5, B=8, nous avons besoin de l'inverse modulaire de 5 mod 26, qui est 21.
Étape 1: Appliquer la formule de décryptage D(y) = 21(y - 8) mod 26
- R(17): 21×(17-8) mod 26 = 21×9 mod 26 = 189 mod 26 = 7 = H
- C(2): 21×(2-8) mod 26 = 21×(-6) mod 26 = 21×20 mod 26 = 420 mod 26 = 4 = E
- L(11): 21×11-8) mod 26 = 21×3 mod 26 = 63 mod 26 = 11 = L
- L(11): 21×11-8) mod 26 = 21×3 mod 26 = 63 mod 26 = 11 = L
- A(0): 21×(0-8) mod 26 = 21×(-8) mod 26 = 21×18 mod 26 = 378 mod 26 = 14 = O
Résultat: RCLLA → HELLO
Mise en œuvre de Python
Voici une implémentation complète du chiffre affine:
def gcd(a, b):
while b:
a, b = b, a % b
return a
def mod_inverse(a, m):
for x in range(1, m):
if (a * x) % m == 1:
return x
return None
def affine_encrypt(plaintext, a, b):
if gcd(a, 26) != 1:
raise ValueError("Key 'a' must be coprime with 26")
result = []
for char in plaintext.upper():
if char.isalpha():
x = ord(char) - ord('A')
encrypted = (a * x + b) % 26
result.append(chr(encrypted + ord('A')))
else:
result.append(char)
return ''.join(result)
def affine_decrypt(ciphertext, a, b):
if gcd(a, 26) != 1:
raise ValueError("Key 'a' must be coprime with 26")
a_inv = mod_inverse(a, 26)
result = []
for char in ciphertext.upper():
if char.isalpha():
y = ord(char) - ord('A')
decrypted = (a_inv * (y - b)) % 26
result.append(chr(decrypted + ord('A')))
else:
result.append(char)
return ''.join(result)
# Example usage
plaintext = "HELLO WORLD"
a, b = 5, 8
encrypted = affine_encrypt(plaintext, a, b)
decrypted = affine_decrypt(encrypted, a, b)
print(f"Plaintext: {plaintext}")
print(f"Encrypted: {encrypted}")
print(f"Decrypted: {decrypted}")
Problèmes pratiques
Testez votre compréhension avec ces exercices:
Problème 1: Chiffrer "ATTACK" avec A=7, B=3
Problème 2: Déchiffrer "FGXOT" avec A=3, B=5
Problème 3: Trouver l'inverse modulaire de 7 mod 26
Problème 4: Chiffrer "CIPHER" avec A=11, B=15
Problème 5: Quelles sont toutes les valeurs valides pour la clé A?
Answers
- ATTACK → EZZHFP
- FGXOT → HELLO
- L'inverse modulaire de 7 mod 26 est de 15 (parce que 7×15 = 105 = 4×26 + 1)
- CIPHER → AFLWPC
- Valeurs A valides: 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25
Essayez ces exemples dans notre outil de chiffrement Affine ou utilisez le Calculateur pour vérifier les inverses modulaires.
Foire aux questions
Comment puis-je calculer l'inverse modulaire?
L'inverse modulaire de A mod 26 est un nombre A−1 tel que (A × A−1) mod 26 = 1. Vous pouvez le trouver en testant les numéros 1-25 ou en utilisant l'algorithme euclidien étendu. Notre calculateur calcule cela automatiquement.
Que se passe-t-il si j'utilise une valeur A invalide?
Si A partage un facteur commun avec 26 (comme 2, 4, 6, 8, 10, 12, 13, etc.), plusieurs lettres en texte en clair seront cartographiées à la même lettre de chiffrement, rendant le décryptage impossible.
Peut J'implémente le chiffre affine dans d'autres langues ?
Oui ! L'algorithme fonctionne de même dans n'importe quel langage de programmation. Les opérations principales sont l'arithmétique modulaire (% opérateur) et la recherche d'inverses modulaires. Voir notre exemple Python ci-dessus comme une référence.
En quoi le chiffre affine est-il lié au chiffre César ?
Le chiffre César est un cas particulier du chiffre affine où A=1. Cela réduit la formule à E(x) = (x + b) mod 26, ce qui n'est qu'un simple déplacement.