{\rtf1\mac\ansicpg10000\cocoartf102 {\fonttbl\f0\fswiss\fcharset77 Helvetica;} {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww10020\viewh9080\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\fs24 \cf0 with(StringTools):with(LinearAlgebra):\ \ int_to_char:=proc(number)\ Char(number+65);\ end proc:\ \ char_to_int:=proc(letter)\ Ord(letter)-65;\ end proc:\ \ Length:=proc(string)\ l:=0;\ s := 0;\ while s = 0 do\ if (string[l+1] = "") then\ s:=1;\ else \ l:=l+1;\ end if;\ end do;\ l;\ end proc:\ \ VigenereCipher:=proc(message, key) \ message_1:=message;\ encrypted:="";\ l:=Length(key);\ r:=Length(message) mod l;\ if r>0 then\ for i from 1 by 1 to l-r do\ message_1:=Join([message_1, "X"],"");\ end do;\ end if;\ print(message_1);\ blocks:=Length(message_1)/l;\ for i from 1 by 1 to blocks do\ for j from 1 by 1 to l do\ newletter:=int_to_char(char_to_int(key[j])+char_to_int(message_1[j+l*(i-1)]) mod 26);\ encrypted := Join([encrypted,newletter],"");\ end do;\ end do;\ encrypted;\ end proc:\ \ AffineCipher:=proc(message,a,b);\ size:=Length(message);\ encrypted:="";\ for i from 1 by 1 to size do\ letter:=a*char_to_int(message[i]) + b mod 26;\ encrypted:=Join([encrypted, int_to_char(letter)],"");\ end do;\ encrypted;\ end proc:\ \ HillCipher2:=proc(message,A)\ message_1:=message;\ encrypted:="";\ r:=Length(message) mod 2;\ if r > 0 then\ message_1:=Join([message_1, "X"],"");\ end if;\ n:=Length(message_1);\ print(message_1);\ pairs:=n/2;\ for i from 1 by 1 to pairs do\ P:=<,>;\ C:=Multiply(A,P);\ encrypted:=Join([encrypted,int_to_char(C[1,1] mod 26),int_to_char(C[2,1] mod 26)],"");\ end do;\ encrypted;\ end proc:\ \ HillCipher3:=proc(message,A)\ message_1:=message;\ encrypted:="";\ r:=Length(message) mod 3;\ if r > 0 then\ for i from 1 by 1 to 3-r do\ message_1:=Join([message_1, "X"],"");\ end do;\ end if;\ n:=Length(message_1);\ print(message_1);\ triples:=n/3;\ for i from 1 by 1 to triples do\ P:=<,,>;\ C:=Multiply(A,P);\ encrypted:=Join([encrypted,int_to_char(C[1,1] mod 26),int_to_char(C[2,1] mod 26),int_to_char(C[3,1] mod 26)],"");\ end do;\ encrypted;\ end proc:\ \ TextToBlocks:=proc(message, m)\ message_1:=message;\ r:=Length(message) mod m;\ if r>0 then\ for i from 1 by 1 to m-r do\ message_1:=Join([message_1, "X"], "");\ end do;\ end if;\ print(message_1);\ blocks:=Length(message_1)/m;\ P:=Vector[row](blocks);\ for i from 1 by 1 to blocks do\ s:=0;\ for j from 1 by 1 to m do\ s:= s + char_to_int(message_1[(i-1)*m+j])*10^(2*(m-j));\ end do;\ P[i]:=s;\ end do;\ P;\ end proc:\ \ BlocksToText:=proc(numbers, m)\ numbers_1:=numbers;\ message:="";\ n:=Dimension(numbers);\ for i from 1 by 1 to n do\ for j from 1 by 1 to m do\ letter:=floor(numbers_1[i]/10^(2*(m-j)));\ numbers_1[i]:=numbers_1[i] - letter*10^(2*(m-j));\ message:=Join([message, int_to_char(letter)],"");\ end do;\ end do;\ message;\ end proc:\ \ ExpCipher:=proc(numbers,p,e)\ n:=Dimension(numbers);\ E:=Vector[row](n);\ for i from 1 by 1 to n do\ E[i] := numbers[i]^e mod p;\ end do;\ E;\ end proc:\ \ AutokeyCipher:=proc(message, k, e, d)\ L:=Length(message);\ kk:=k;\ encrypted:="";\ for i from 1 by 1 to L do \ letter:=char_to_int(message[i]) + char_to_int(kk) mod 26;\ encrypted:=Join([encrypted,int_to_char(letter)],"");\ kk:=int_to_char(e*char_to_int(message[i]) + d*char_to_int(encrypted[i]) mod 26);\ end do;\ encrypted;\ end proc:\ \ FrequencyCount:=proc(message)\ size:=Length(message);\ frequency:=array(1..2, 1..26);\ for i from 1 by 1 to 26 do\ frequency[1,i]:=int_to_char(i-1);\ frequency[2,i]:=0;\ end do;\ for i from 1 by 1 to size do\ letter:=char_to_int(message[i])+1;\ frequency[2,letter]:=frequency[2,letter]+1;\ end do;\ for i from 1 by 1 to 26 do\ print(frequency[1,i], frequency[2,i]);\ end do;\ end proc:\ \ \ \ \ \ \ \ \ \ }