Daten zu verschlüsseln ist nicht schwer -dieses kleine Programm zeigt es. Jeder hat sicherlich schon einmal seine Daten kodiert. Eigentlich braucht man auch nur die Buchstaben etwas zu verschieben. Aus A wird B, aus B wird C ... und aus Z wird A, schon ist ein Text kodiert. Bei einer derartigen Verschlüsselung macht aber auch die Entschlüsselung keine Probleme, denn man hat ja höchstens 25 Möglichkeiten.
Trotzdem: Das hier vorgestellte (Megamax Modula 2-)Programm baut auf einen solchen Algorithmus auf. Es verschiebt aber nicht nur das Alphabet, sondern alle ASCII-Zeichen.
Damit bestehen schon 255 Möglichkeiten der Kodierung.
Das Programm geht noch einen Schritt weiter, denn es verschiebt nicht nur alle ASCII-Zeichen um einen einheitlichen Wert, sondern sogar um unterschiedliche Werte. Hierzu gibt man ein beliebiges Kodewort ein, beispielsweise “Atari ST”.
Die Zeichenkette ist 8 Zeichen lang. Somit wird erst jedes achte Zeichen um einen einheitlichen Betrag verschoben. Werden längere Worte genommen, ist dieser Wiederholungseffekt noch kleiner. Die Bedienung des Programmes ist denkbar einfach.
Auch die Verschlüsselungsmöglichkeiten nehmen mit längeren Kodeworten zu. Hatte man bei einem Zeichen (Kodewort mit einem Buchstaben) noch 255(=256-l) Möglichkeiten, so kann der Text schon bei zwei Zeichen mit 65535(=256A2-1) Möglichkeiten verschlüsselt werden. Bei unserem Beispiel “Atari ST” mit 8 Zeichen hat sich die Verschlüsselungsmöglichkeit schon so stark vergrößert, daß kaum noch eine Chance besteht, ohne Kenntnis des Schlüsselwortes an den ursprünglichen Text zu kommen. Es sind nämlich fast 2*10A19 Möglichkeiten!
Wem das noch immer nicht sicher genug ist, der kann ja noch einen Schritt weiter gehen. Wenn man den Text doppelt verschlüsselt, mit zwei unterschiedlichen und vor allem unterschiedlich langen * Kodeworten, ist es fast unmöglich, den alten Text über bloßes Probieren zu entziffern.
Wie verschlüsselt das Programm nun? Es liest Byte für Byte eine Datei aus, berechnet die ASCII-Kodenummer des gelesenen Zeichens, addiert die Kodenummer des Schlüsselwortes und speichert das Zeichen wieder ab. Die Zeichen des Kodewortes werden einfach nacheinander genommen, am Ende des Wortes wird vorn wieder angefangen. Sollte mal eine ASCII-Kodenummer entstehen, die über 255 liegt, reduziert MOD 256 die Zahl.
Bei der Entschlüsselung läuft das Verfahren analog ab. Die ASCIl-Kodenummern des Schlüsselwortes werden subtrahiert statt addiert.
Wie Ver- und Entschlüsselung in einem Beispiel durchgeführt werden, ist im Bild 1 zu betrachten. Bild 2 zeigt einen Ursprungstext und seine Verschlüsselung. Können Sie den Text ohne Kodewort entschlüsseln?
Verschlüsselt werden kann eigentlich alles. An die unverschlüsselte Datei erinnert dann nur noch die Länge, die bei diesem Kodierverfahren nicht verändert wird.
Noch ein kleiner Tip: Da die Dateien byteweise ausgelesen und geschrieben wird, ist es ratsam, sie auf unterschiedlichen Datenträgern zu verteilen. Beispielsweise kann der Quelltext in ein RAM-Disk sein und die Zieldatei auf der Diskette. Von RAM-Disk zu RAM-Disk ist natürlich auch möglich. Aber Quell- und Zieldatei auf einer Diskette zu lassen, kann bei der Verschlüsselung Zeit kosten.
Viel Freude mit dem kleinen Programm.
(****************************************************)
(* Programm zur Ver-/Entschlüsselung von Dateien. *)
(* Autor: Dietmar Rabich, Dülmen *)
(* Version 1.0, 24. März 1988 *)
(* Entwickelt mit Megamax Modula 2. *)
(****************************************************)
MODULE Codierer;
FROM Files IMPORT Open,Create,Close,EOF,File,Access, ReplaceMode;
FROM Binary IMPORT ReadByte,WriteByte;
FROM Strings IMPORT Length,String;
FROM InOut IMPORT ReadString,WriteString,Read,WriteLn;
VAR SourceFile,DestinationFile,CodeWort : String;
Schluessel : CHAR;
(* Routine zum (De-)Codieren einer Datei *)
PROCEDURE Codiere (Source,Dest,Code : ARRAY OF CHAR;
Crypt : BOOLEAN);
VAR Char : CHAR;
Nummer,LengthCode : CARDINAL;
SFile,DFile : File;
BEGIN
Nummer:=0;
LengthCode:=Length(Code); (*Länge des Codewortes *)
Open(SFile,Source,readOnly);
Create(DFile,Dest,writeOnly,replaceOld);
WHILE ~EOF(SFile) DO
ReadByte(SFile,Char); (* Character lesen *)
IF Crypt THEN
Char:=CHR((ORD(Char)+ORD (Code[Nummer])) MOD 256)
(* verschlüsseln *)
ELSE
Char:=CHR((ORD(Char)+256-ORD(Code[Nummer])) MOD 256)
(* entschlüsseln *)
END;
WriteByte(DFile,Char); (*Character schreiben *)
INC(Nummer);
IF Nummer==LengthCode THEN
Nummer:=0
END
END;
Close(SFile);
Close(DFile)
END Codiere;
BEGIN
(* Eingabe der Dateinamen etc. *)
WriteString('(De-)Codierer, Version 1.0,24.März 1988’);
WriteLn;
WriteString('**Autor:** Dietmar Rabich, Dülmen');
WriteLn;
WriteString('Entwickelt mit Megamax Modula 2.');
WriteLn;
WriteString (' ========================');
WriteLn;
WriteString ('Quelldatei: ');
ReadString (SourceFile );
WriteString ('Zieldatei: ');
ReadString (DestinationFile);
WriteString ('Codewort: ');
ReadString (CodeWort );
WriteString ('Verschlüsseln (v) oder entschlüsseln (e)?');
Read(Schluessel);
(* Datei ver- oder entschlüsseln *)
Codiere(SourceFile,DestinationFile,CodeWort,Schluessel ='v')
END Codierer.
(* Ende des Programmes *)