Le chiffrement affine lettre à lettre est déterminé par la donnée de 3 paramètres :
a, b, p qui transforme l'entier n en
m = a*n + b ( mod p).
Pour avoir une fonction de décodage il faut et il suffit que a soit inversible
dans Z/pZ c'est à dire que a et p soient premiers entre eux.
La fonction de décodage est alors :
a1*m + b1 avec,
a1 inverse de a dans Z/pZ (
a1 = u ( mod p) si a*u + p*v = 1
(identité de Bézout)) et
b1 = - b*a1 ( mod p).
Pour ce chiffrement affine, on peut utiliser tous les caractères dont les codes
ASCII vont de 32 à 127 (les caractères de code 0 à 31 ne sont pas imprimables
et au delà de 127 ils ne sont pas standards).
Étant donnés
a, b, p = 96, comment coder ?
À chaque caractère (de code ASCII compris entre 32 et 127) on fait
correspondre un entier n entre 0 et 95 ;
n est égal à : (code ASCII du caractère) - 32.
Par exemple, à B on fait correspondre 34 (66-32 ).
Puis, on calcule
m = a*n + b mod 96 :
pour a = 55, b = 79 et n = 34 on obtient m = 29.
Puis, on cherche le caractère de code ASCII m + 32. Le caractère qui a
comme code ASCII 29+32=61 est le signe =) : c'est ce caractère qui
sera donc choisi comme codage de la lettre B.
Exemple :
On va coder la phrase :
BEAUCOUP DE TRAVAIL POUR RIEN!?
en la coupant en trois morceaux (le caractère espace termine les deux premiers morceaux).
Par exemple :
BEAUCOUP sera codé avec
a = 55 b = 79 et p = 96
DE TRAVAIL sera codé avec
a = 49 b = 25 et p = 96
POUR RIEN!? sera codé avec
a = 73 b = 48 et p = 96
On code BEAUCOUP avec
a = 55 b = 79 et p = 96.
On obtient :
="f2th2?o
Le devoir du premier élève est donc :
avec les paramètres de codage
a = 55 b = 79 et p = 96, décoder ="f2th2?o
L'élève doit :
- trouver les paramètres de décodage (ici
a1 = 7 b1 = 23) :
en effet l'inverse a1 de
a ( mod 96) est obtenu en ecrivant l'identité de Bézout pour a et p :
55*7 - 96*4 = 1 et
b1 = 79*7 ( mod 96) = 23
- puis décoder à l'aide d'une table de code ASCII :
le code ASCII du caractère = est 61 donc :
m = 61 - 32 = 29
a1*n + b1 ( mod 96) = 7*29 + 23 ( mod 96) = 226 ( mod 96) = 34
La lettre de code 34+32 = 66 est B