Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,7 +1,7 @@
|
|||
;Description:
|
||||
The [[wp:Chaocipher|Chaocipher]] was invented by J.F.Byrne in 1918 and, although simple by modern cryptographic standards, does not appear to have been broken until the algorithm was finally disclosed by his family in 2010.
|
||||
|
||||
The algorithm is described in [http://www.mountainvistasoft.com/chaocipher/ActualChaocipher/Chaocipher-Revealed-Algorithm.pdf this paper] by M.Rubin in 2010 and there is a C# implementation [https://www.c-sharpcorner.com/UploadFile/b942f9/implementing-the-chaocipher-in-C-Sharp/ here].
|
||||
The algorithm is described in [http://www.chaocipher.com/ActualChaocipher/Chaocipher-Revealed-Algorithm.pdf this paper] by M.Rubin in 2010 and there is a C# implementation [https://www.c-sharpcorner.com/UploadFile/b942f9/implementing-the-chaocipher-in-C-Sharp/ here].
|
||||
|
||||
|
||||
;Task:
|
||||
|
|
|
|||
|
|
@ -1,101 +0,0 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
|
||||
procedure chao_slices is
|
||||
type iMode is (Encrypt, Decrypt);
|
||||
|
||||
L_Alphabet : String := "HXUCZVAMDSLKPEFJRIGTWOBNYQ";
|
||||
R_Alphabet : String := "PTLNBQDEOYSFAVZKGJRIHWXUMC";
|
||||
plaintext : String := "WELLDONEISBETTERTHANWELLSAID";
|
||||
ciphertext : String (1 .. plaintext'length);
|
||||
plaintext2 : String (1 .. plaintext'length);
|
||||
offset : Natural;
|
||||
|
||||
function IndexOf (Source : String; Value : Character) return Positive is
|
||||
Result : Positive;
|
||||
|
||||
begin
|
||||
for I in Source'Range loop
|
||||
if Source (I) = Value then
|
||||
Result := I;
|
||||
exit;
|
||||
end if;
|
||||
end loop;
|
||||
return Result;
|
||||
end IndexOf;
|
||||
|
||||
function Exec
|
||||
(Text : String; mode : iMode; showsteps : Boolean := False) return String
|
||||
is
|
||||
etext : String (Text'First .. Text'Last);
|
||||
temp : String (1 .. 26);
|
||||
index : Positive;
|
||||
store : Character;
|
||||
left : String := L_Alphabet;
|
||||
right : String := R_Alphabet;
|
||||
begin
|
||||
for I in Text'Range loop
|
||||
if showsteps then
|
||||
Put_Line (left & " " & right);
|
||||
end if;
|
||||
|
||||
if mode = Encrypt then
|
||||
index := IndexOf (Source => right, Value => Text (I));
|
||||
etext (I) := left (index);
|
||||
else
|
||||
index := IndexOf (Source => left, Value => Text (I));
|
||||
etext (I) := right (index);
|
||||
end if;
|
||||
|
||||
exit when I = Text'Last;
|
||||
|
||||
-- permute left
|
||||
-- The array value permutations are performed using array slices
|
||||
-- rather than explicit loops
|
||||
|
||||
if index > 1 then
|
||||
offset := 26 - index;
|
||||
temp (1 .. offset + 1) := left (index .. index + offset);
|
||||
|
||||
temp (offset + 2 .. 26) := left (1 .. index - 1);
|
||||
store := temp (2);
|
||||
|
||||
temp (2 .. 13) := temp (3 .. 14);
|
||||
temp (14) := store;
|
||||
left := temp;
|
||||
|
||||
-- permute right
|
||||
-- The array value permutations are performed using array slices
|
||||
-- rather than explicit loops
|
||||
|
||||
temp (1 .. offset + 1) := right (index .. index + offset);
|
||||
|
||||
temp (offset + 2 .. 26) := right (1 .. index - 1);
|
||||
store := temp (1);
|
||||
|
||||
temp (1 .. 25) := temp (2 .. 26);
|
||||
temp (26) := store;
|
||||
store := temp (3);
|
||||
|
||||
temp (3 .. 13) := temp (4 .. 14);
|
||||
temp (14) := store;
|
||||
right := temp;
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
return etext;
|
||||
|
||||
end Exec;
|
||||
begin
|
||||
Put_Line ("The original text is : " & plaintext);
|
||||
New_Line;
|
||||
Put_Line
|
||||
("The left and right alphabets after each permutation during encryption are:");
|
||||
New_Line;
|
||||
ciphertext := Exec (plaintext, Encrypt, True);
|
||||
New_Line;
|
||||
Put_Line ("The ciphertext is : " & ciphertext);
|
||||
plaintext2 := Exec (ciphertext, Decrypt);
|
||||
New_Line;
|
||||
Put_Line ("The recovered plaintext is : " & plaintext2);
|
||||
end chao_slices;
|
||||
Loading…
Add table
Add a link
Reference in a new issue