08-04-17.mw

> with(StringTools):
 

> convert("Word",bytes);
 

[87, 111, 114, 100] (1)
 

> convert([87,111,111,111],bytes);
 

Wooo (2)
 

> for i from 1 to 40 do
 if ( IsPrintable(convert([i], bytes) )) then
      print(i);
 fi;
od;
 

 

 

 

 

 

 

 

 

32
33
34
35
36
37
38
39
40 (3)
 

>
 seq( convert([i],bytes), i=1..255);
 














(4)
 

> select( IsPrintable, [seq( convert([i],bytes), i=1..255)]);
 

[", "?", "@", "A", "B", "C", "D", "E", "F", "G",..." align="center" border="0">
[", "?", "@", "A", "B", "C", "D", "E", "F", "G",..." align="center" border="0">
[", "?", "@", "A", "B", "C", "D", "E", "F", "G",..." align="center" border="0">
[", "?", "@", "A", "B", "C", "D", "E", "F", "G",..." align="center" border="0">
(5)
 

> Alphabet:=cat(op(select( IsPrintable, [seq( convert([i],bytes), i=1..255)])));
 

 !?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" align="center" border="0">
 !?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" align="center" border="0">
 !?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" align="center" border="0">
(6)
 

> length(Alphabet);
 

95 (7)
 

> StringToList := proc(text)
 global Alphabet;
 return(
     [seq(  SearchText(text[i], Alphabet)   ,i=1..length(text))] );
end:
ListToString := proc( numlist )
 global Alphabet;
 seq( Alphabet[numlist[i]], i=1..nops(numlist) );
end:
 

> Julius := proc( plain::string, shift::integer)
 local nums,crypt, i;
 global Alphabet;
 nums := StringToList(plain);
 crypt := ListToString(   [ seq(nums[i] + shift, i=1..nops(nums)) ] );
 return(crypt);
end:
 

> Vignere := proc( plain::string, shifts::list(integer))
 local nums,crypt, i, L;
 global Alphabet;

 L := nops(shifts);
 nums := StringToList(plain);
 crypt := ListToString(  
       [ seq(nums[i] + shifts[modp(i,L)+1], i=1..nops(nums)) ] );
 return(crypt);
end:
 

> Vignere("abcd", [4,3,2,1]);
 

d (8)
 

> Vignere := proc( plain::string, shifts::list(integer))
 local nums,crypt, i, L;
 global Alphabet;

 L := nops(shifts);
 nums := StringToList(plain);
 crypt := cat(
       ListToString(  
       [ seq(nums[i] + shifts[modp(i-1,L)+1], i=1..nops(nums)) ] ));
 return(crypt);
end:
 

> Vignere("abcd", [4,3,2,1]);
 

eeee (9)
 

> Vignere(%, [-4,-3,-2,-1]);
 

abcd (10)
 

> unVignere := proc( plain::string, shifts::list(integer))
 local nums,crypt, i, L;
 global Alphabet;

 L := nops(shifts);
 nums := StringToList(plain);
 crypt := cat(
       ListToString(  
       [ seq(nums[i] - shifts[modp(i-1,L)+1], i=1..nops(nums)) ] ));
 return(crypt);
end:
 

> unVignere("eeee",[4,3,2,1]);
 

abcd (11)
 

>
 

>
 

>
 

> myrand:=rand(95);
 

proc () (proc () option builtin = RandNumberInterface; end proc)(6, 95, 7) end proc (12)
 

> myrand();
 

92 (13)
 

> myrand();
 

44 (14)
 

> myrand();
 

5 (15)
 

> ?rand
 

> seq(myrand(),i=1..200);
 

58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
58, 43, 37, 68, 26, 16, 89, 33, 17, 51, 55, 42, 82, 24, 89, 92, 59, 92, 13, 49, 46, 7, 45, 43, 8, 76, 58, 15, 0, 69, 76, 38, 91, 70, 66, 77, 50, 52, 11, 18, 62, 39, 89, 2, 48, 48, 66, 73, 89, 73, 26, ...
(16)
 

> seq(myrand(),i=1..200);
 

29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
29, 13, 78, 72, 20, 77, 48, 92, 14, 55, 68, 16, 20, 41, 20, 4, 57, 2, 85, 54, 3, 91, 45, 87, 33, 67, 48, 60, 20, 85, 41, 4, 32, 76, 57, 28, 64, 28, 34, 28, 33, 65, 43, 59, 82, 31, 84, 67, 58, 39, 75, ...
(17)
 

> randomize(2);
 

2 (18)
 

> seq(myrand(),i=1..20);
 

40, 15, 72, 22, 43, 82, 75, 7, 34, 49, 75, 85, 47, 63, 31, 90, 20, 37, 39, 67 (19)
 

> randomize(2);
 

2 (20)
 

> seq(myrand(),i=1..20);
 

40, 15, 72, 22, 43, 82, 75, 7, 34, 49, 75, 85, 47, 63, 31, 90, 20, 37, 39, 67 (21)
 

> OneTimePad := proc( plain::string, seed::integer)
 local nums,crypt, i, myrand, L;
 global Alphabet;

 L:=length(Alphabet);
 myrand := rand(1..L);
 randomize(seed);
 nums := StringToList(plain);
 crypt := cat(ListToString(   [ seq( modp(nums[i] + myrand()-1, L)+1,
                                    i=1..nops(nums)) ] ));
 return(crypt);
end:
 

> OneTimePad("ho ho ho", 7);
 

9U:Md8fJ (22)
 

> UnTimePad := proc( plain::string, seed::integer)
 local nums,crypt, i, myrand, L;
 global Alphabet;

 L:=length(Alphabet);
 myrand := rand(1..L);
 randomize(seed);
 nums := StringToList(plain);
 crypt := cat(ListToString(   [ seq( modp(nums[i] - myrand()-1, L)+1,
                                    i=1..nops(nums)) ] ));
 return(crypt);
end:
 

> OneTimePad("ho ho ho", 7);
 

9U:Md8fJ (23)
 

> UnTimePad(%, 7);
 

ho ho ho (24)
 

>