CryptographyMonalphabetic substitution cipherswith(StringTools):toNumbers:=message->
map(x->x-96,map(Ord,(Explode(Select(IsLower,LowerCase(message)))))):toNumbers("Affine cipher");modpositive:=(m,n)->modp(m-1,n)+1:map(x->modpositive(9*x+18,26),[1, 6, 6, 9, 14, 5, 3, 9, 16, 8, 5, 18]);toLetters:=numbers->UpperCase(Join(map(Char,map(x->x+96,numbers)),"")):toLetters([1, 20, 20, 21, 14, 11, 19, 21, 6, 12, 11, 24]);LowerCase(toLetters(map(x->modpositive(3*(x-18),26),toNumbers("ATTUNKSUFLKX"))));The Pohlig-Hellman cipher and the discrete logarithm problemtoNumbers("polygraphic");n := 123456789:
for i from n while not(isprime(n)) do
n:=n+1:
end do:
print(n);
gcd(123,123456790);map(x->modp(x&^123,123456791),[16151225, 07180116, 080903]);msolve({123*rprime=1},123456790);map(x->modp(x&^50185687,123456791),[85925373, 3137134, 6901637]);toLetters([16,15,12,25,7,18,1,16,8,9,3]);The Massey-Omura exchangea:=123456789:p:=41889443039:s:=85479892289:gcd(s,p-1);a1:=modp(a&^s,p);r:=46828919:gcd(r,p-1);a2:=modp(a1&^r,p);msolve({s*sprime=1},p-1);a3:=modp(a2&^32914471425,p);msolve({r*rprime=1},p-1);modp(a3&^32579883087,p);The RSA algorithmp:=115518123229:q:=8445806041:n:=p*q;m:=(p-1)*(q-1);r:=875189387279:gcd(m,r);modp(123456789&^r,n);msolve({r*rprime=1},m);modp(164186964938094304597&^305536865450871050159,n);NotesComputing powers mod pourpowermod:=proc(a,k,n)
local b,c,ktemp,r;
b:=1;
c:=a;
ktemp:=k;
while ktemp>0 do
r:=modp(ktemp,2);
if r=1 then b:=modp(b*c,n) end if;
c:=modp(c^2,n);
ktemp:=(ktemp-r)/2;
end do;
return(b);
end proc:ourpowermod(123456789, 85479892289, 41889443039);