decopara3(para):={ //=le parametrage de decodage du parametrage para (liste). local a,b,l; a:=para[0]; b:=para[1]; l:=bezout(a,96^3); if (l[2]!=1) return(false); a:=l[0]; if (a<0) a:=a+96^3; b:=-irem(b*a,96^3)+96^3; return([a,b]); }Voici la transformation d'un mot s d'au moins 3 lettres en un nombre entier par la fonction mot2n :
mot2n(s):={ //transforme un mot s de 3 lettres en n //n a pour ecriture s en base 96 local l,n; l:=asc(s); n:=(l[0]-32)*96^2+(l[1]-32)*96+l[2]-32; return(n); }
Voici la transformation d'un nombre entier n en son écriture en base 96 (c'est à dire en un mot d'au moins 3 lettres) par la fonction n2mot : cette fonction utilise la fonction ecritu96 qui écrit n dans la base 96 comme un mot de 1,2,3 etc caractères. Pour obtenir un mot d'au moins 3 lettres il suffit de rajouter des espaces devant le mot puisque le code ASCII de l'espace vaut 32, cela revient à rajouter des zéros devant l'écriture de n.
ecritu96(n):={ //transforme l'entier n en la chaine s //s est l'ecriture de n en base 96 local s,r; // n est un entier et b=96 // ecritu96 est une fonction iterative //ecritu96(n)=l'ecriture de n en base 96 s:=""; while (n>=96){ r:=irem(n,96); r:=char(r+32); s:=r+s; n:=iquo(n,96); } n:=char(n+32); s:=n+s; return(s); }; n2mot(n):={ local mot,s; mot:=ecritu96(n); s:=size(mot); //on suppose n<96^3 on transforme n en un mot de 3 caracteres //on rajoute des espaces si le mot n'a pas 3 lettres if (s==2) {mot:=" "+mot;} else { if (s==1) {mot:=" "+mot;} } return(mot); }
Voici le codage d'un mot d'au moins 3 lettres par la fonction codmot3 : en prenant toujours
codmot3(mot,para):={ //codage d'un mot de 3 lettres avec le parametrage para=[a,b] local n,m,a,b; //para:[569,2] mod 96^3 //decopara3=[674825, 419822] a:=para[0]; b:=para[1]; n:=mot2n(mot); m:=irem(a*n+b,96^3); return(n2mot(m)); }Le décodage d'un mot codé avec codmot3 se fait aussi avec la fonction codmot3.
codmess3(mess,para):={ //code le message mess,parametrage para et paquet de 3 lettres local s,messcod,mess3; s:=size(mess); if (irem(s,3)==2){ mess:=mess+" "; s:=s+1; } else { if (irem(s,3)==1) { mess:=mess+" "; s:=s+2; } } messcod:=""; for (k:=0;k<s;k:=k+3){ mess3:=mess[k..k+2]; mess3:=codmot3(mess3,para); messcod:=messcod+mess3; } return(messcod); }Le décodage du message se fait aussi par la fonction codmess3