0

i know that it is related to the programming a bit more, but i think mathematical issue as well, for instance there is given my code

 function result=affine_cipher_encode(a,b,m,s)
    %a and b  are prime numbers
    % m=total number of  letters in english language(26)
    %s-input string 
    % result=output after  affine  chiper algorithm
    n=length(s);% declare length of  string
    letter=['a':'z'];% declare array of letters with following index 'a'=1,b='2',..'z'=26;
    result=zeros(size(s));
    for ii=1:n
       if ~isspace(s(ii))
           index=find(letter==s(ii));
           c=mod((a*index+b),m);
           converted_letter=letter(c);
           result(ii)=converted_letter;

       else
           continue;
       end


    end
    result=char(result);
    end

which uses Affine cipher function $c=a*p+b\pmod m$ this line works successfully, there is my example

a=5;
b=7;
m=26;
s='wbgbuwyqbbhtynhkkzgyqbrhtykb';
result=affine_cipher_encode(a,b,m,s)

result =

rqpqhrbnqqucbyujjgpbnqsucbjq

after that, i decided to write code for decoding given result , for that i use multiplicative inverse of $a$ modulo $m$, so i wrote following code

function decode=affine_cipher_decode(a,b,m,result)
%a and b  are prime numbers
% m=total number of  letters in english language(26)
%s-input string 
% decodet=output after  affine  chiper decoding algorithm
n=length(result);% declare length of  string
letter=['a':'z'];% declare array of letters with following index 'a'=1,b='2',..'z'=26;
decode=zeros(size(result));
 %find  multiplicative inverse of  a and m 
[g,x,d] = gcd(a,m); 
x = mod(x,m);  % find multiplicative inverse 
for ii=1:n
     if ~isspace(result(ii))
          index=find(letter==result(ii));
          p=mod(x*(index-b),m);
          if p==0
              c=mod(a*index+b,m);
              decode(ii)=letter(c);
          else
          converted_letter=letter(p);
       decode(ii)=converted_letter;
          end
     else
         continue;
     end
end
decode=char(decode);

but there was problem, my $p$ value which can be calculated by

$p=x*(c-b)\pmod m$

but at one fragment of code, i am getting $p=0$ which causes error, that why for recovering of original index, i added following fragment

 if p==0
                  c=mod(a*index+b,m);
                  decode(ii)=letter(c);

but i am getting one place different, between original and decoding text,so where i am getting mistake? please help me

0 Answers0