next up previous contents index
suivant: Le codage Jules César monter: Codage précédent: Codage en utilisant une   Table des matières   Index

Codage en utilisant un groupement de deux lettres

On écrit la procédure c2n2 qui transforme une chaîne de caractères m en une liste l d'entiers entre 0 et 262 - 1 = 675 :
On fait des groupements de deux lettres (quitte à terminer le message par la lettre "F" pour avoir un nombre pair de lettres), chaque groupement est considéré comme l'écriture en base 26 d'un entier en utilisant comme "chiffre" les lettres majuscules. Ainsi, "BC" est l'écriture en base 26 de 28 (28=1*26+2).
On écrit :
c2n2(m):={
local s,lr,l,n;
s:=size(m);
if (irem(s,2)==1){
m:=append(m,"F");
s:=s+1;
}
lr:=[];
l:=asc(m);
for (k:=0;k<s;k:=k+2){
n:=l[k]*26+l[k+1];
lr:=append(lr,n);
}
return(lr);
}
On écrit ensuite la procédure n2c2 qui transforme une liste d'entiers entre 0 et 675 (675=25*26+25=26*26-1) en une chaîne de caractères m :
chaque entier étant écrit en base 26 avec comme "symboles" les 26 lettres majuscules.
On écrit :
n2c2(l):={
local s,n,m;
s:=size(l);
m:="";
for (k:=0;k<s;k++){
n:=l[k];
m:=append(m,char(iquo(n,26)+65));
m:=append(m,char(irem(n,26)+65));
}
return(m);
}
On écrit ensuite la fonction affin2 de paramètre a,b,l qui transforme une liste l d'entiers k entre 0 et 675 en la liste d'entiers $ \tt a*k+b mod 676$ (entiers encore compris entre 0 et 675).
On écrit :
affin2(a,b,l):={
local s;
s:=size(l);
for (k:=0;k<s;k++){
l[k]:=irem(a*l[k]+b,676);
}
return(l);
}
On écrit ensuite la fonction cesar2 qui réalise le codage par groupement de 2 lettres utilisant l'application affine affin2:
cesar2(a,b,m):={
return(n2c2(affin2(a,b,c2n2(m))));
}
Question :
Pour quelles valeurs a1 de a et b1 de b, le codage obtenu par cesaraffine peut-il être décodé ?
Réponse :
On doit avoir a1*(a*n + b) + b1 = a1*a*n + a1*b + b1 = n.
Il suffit donc de prendre : b1 = - a1*b mod 676 et a1*a = 1 mod 676
next up previous contents index
suivant: Le codage Jules César monter: Codage précédent: Codage en utilisant une   Table des matières   Index
Documentation de giac écrite par Renée De Graeve