unit NailCrypt;
interface
type
TKeyArray =
Array of String;
//Klasse mit dem Ergebnis
TNailCrypt =
Class //Die Crypt-Klasse mit Funktionen
public
function OpenKeyFile(Filename:
String): TKeyArray;
function Encrypt(Plain_Text:
String; KeyToUse: TKeyArray; Offset: integer):
String;
function Decrypt(Crypted_Text:
String; KeyToUse: TKeyArray; Offset: integer):
String;
end;
implementation
function TNailCrypt.Encrypt(Plain_Text:
String; KeyToUse: TKeyArray; Offset: integer):
String;
var
i,j: integer;
//Schleifenvariablen
lpt,lks,lka: integer;
//Längenangaben: PlainText, KeyStrings und KeyArray
begin
lka := length(keytouse);
//Anzahl der Schlüsselzeilen
lks := Length(KeyToUse[0]);
//Länge der Schlüssezeilen
lpt := Length(Plain_Text);
//Länge des zu verschlüsselnden Textes
SetLength(Result,lpt);
//Länge des Ergebnisses
for i := 1
to lpt
do //Den kompletten String lang
for j := 1
to lks
do //Die komplette Schlüssel-Zeile
if Plain_Text[i] = KeyToUse[lka-1,j]
then //vergleichen
begin
Result[i] := KeyToUse[(i-1+offset)
mod (lka-1),j];
//und den entsprechenden Eintrag
Break;
//wählen und abbrechen
end
else
if j = lks
then //Wenn nicht gleich und alle durch
Result[i] := Plain_Text[i];
//alten nehmen
end;
function TNailCrypt.Decrypt(Crypted_Text:
String; KeyToUse: TKeyArray; Offset: integer):
String;
var
i,j: integer;
//Schleifenvariablen
lct,lks,lka: integer;
//Längenvariablen
begin
lka := Length(KeyToUse);
//Anzahl der Schlüsselzeilen
lks := Length(KeyToUse[0]);
//Länge der Schlüssezeilen
lct := Length(Crypted_Text);
//Länge der zu entschlüsselnden Textes
SetLength(Result,lct);
//Länge des Ergebnisses
for i := 1
to lct
do //Den kompletten String lang
for j := 1
to lks
do //Die komplette Schlüssel-Zeile
if KeyToUse[(i-1+offset)
mod (lka-1),j] = Crypted_Text[i]
then //vergleichen
begin
Result[i] := KeyToUse[lka-1,j];
//und den entsprechenden Eintrag
Break;
//wählen und abbrechen
end
else
if j = lks
then //Wenn nicht gleich und alle durch
Result[i] := Crypted_Text[i];
//gleich lassen
end;
function TNailCrypt.OpenKeyfile(FileName:
String): TKeyArray;
var SomeFile: TextFile;
Buffer:
String;
begin
AssignFile(SomeFile,FileName);
//File Assign
Reset(SomeFile);
//und Reset
SetLength(Result,0);
//Schlüssellänge einstellen
while not eof(SomeFile)
do //Die komplette File lang
begin
SetLength(Result, Length(Result) + 1);
//Schlüssellänge erhöhen,
Readln(SomeFile,Buffer);
//Zeile einlesen
Result[High(Result)] := Buffer;
//und speichern
end;
closefile(SomeFile);
//File Close
end;
end.