suivant: Le codage Jules César
monter: Codage
précédent: Codage en utilisant une
Table des matières
Index
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
(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
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