Textverschlüsselung nach Vigenère
> restart; with(StringTools):
Der zu verschlüsselnde Klartext:
> plaintxt:="Dieser Text ist ganz geheim.";
ASCII-Kodierung einiger Zeichen in dezimaler Schreibweise:
Ord("0");
65
97
48
Herstellung der ersten Zeile eines Vigenère-Quadrates:
j:= 0:
for i from 1 to 26 do
charlst:= cat(charlst, Char(i+64), Char(i+96)):
if (i mod (2) = 0) then
charlst:= cat(charlst, Char(j+48), Char(op(j+1, extra))):
j:= j+1:
fi:
od:
charlst;
Definition des zu verwendenden Schlüssels:
> key:= "m=Iq?b!";
Der Verschlüsselungsalgorithmus:
keystr, code, keyrow;
len:= length (txt):
#
keyrow:= "":
while (length(keyrow) < len) do
keyrow:= cat(keyrow, key):
od:
keyrow:= substring(keyrow, 1..len):
# dient nur zur Veranschaulichung des Verfahrens
printf("%s%s\n", " ", txt);
printf("%s%s\n\n", " ", keyrow);
printf("%s%s\n", " ", lst);
k:= length(key):
len:= length(lst):
for i from 1 to k do
pos:= SearchText(key[i],lst);
rightpart:= substring(lst, pos..len);
leftpart:= substring(lst, 1..pos-1);
keystr[i]:= cat(rightpart, leftpart);
printf("%s%s\n", " ", keystr[i]);
od;
code:= "";
for i from 1 to length(txt) do
pos:= SearchText(txt[i], lst):
code:= cat(code, keystr[((i-1)mod(k))+1][pos]);
od:
printf("\n%s%s", " ", code):
RETURN (code);
end:
Verschlüsselung des anfangs definierten Klartextes:
> code:= encode(plaintxt, charlst, key):
Algorithmus zur Dekodierung des Vigenère-Geheimtextes mit bekanntem Schlüssel:
keystr, plaintxt;
len:= length (lst):
k:= length(key):
for i from 1 to k do
pos:= SearchText(key[i], lst);
rightpart:= substring(lst, pos..len);
leftpart:= substring(lst, 1..pos-1);
keystr[i]:= cat(rightpart, leftpart);
od;
printf ("\n%s%s\n", " ", code):
plaintxt:= "";
for i from 1 to length(code) do
pos:= SearchText(code[i], keystr[((i-1)mod(k))+1]):
plaintxt:= cat(plaintxt, lst[pos]);
od:
printf("\n%s%s", " ", plaintxt):
RETURN (plaintxt);
end:
Entschlüsselung des eben produzierten Geheimtextes:
> plaintxt:= decode(code, charlst, key):
Vigenère (1523-1596) hat ursprünglich für die erste Quadratzeile die folgende Zeichenkette verwendet:
> charlst:= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Definition eines Schlüssels:
> key:= "SCHLUESSEL";
Kodierung und Dekodierung eines Textes:
decode(code, charlst, key):