home *** CD-ROM | disk | FTP | other *** search
File List | 1988-09-20 | 3.5 KB | 78 lines |
-
-
- {---------------------------------------------------------------
- Pascal Colleg
- Demonstration eines primitiven Verfahrens zur Verschlüsselung
- einer Textzeile und der Rückübersetzung in den Klartext
- (C) 1988 TOOLBOX 12'88 & Wolfgang J. Weber
- ---------------------------------------------------------------}
-
- PROGRAM GeheimerCode (Input, Output); { Kopfzeile }
-
- CONST N = 80; { Globale Kon- }
- TYPE Zeile = String[N]; { stanten, Typ- }
- VAR Eingabe : Zeile; { und Variablen- }
- Schluessel: Integer; { Vereinbarungen }
- {--------------------------------------------------------------}
-
- PROCEDURE Codiere(VAR Z:Zeile; VAR W:Integer);
- { Übergabe von Z und von W als Variable (by refrence) }
- VAR Stelle: 1..N; { Stelle und Nr sind lokale }
- Nr : Integer; { Variable für diese Prozedur }
- {..............................................................}
- FUNCTION ZufallsSchluessel: Integer; { Funktion ohne Parameter }
- { Diese Funktion ist lokales Objekt der Prozedur Codiere; sie
- kann weder von der Prozedur Decodiere noch vom Hauptprogramm
- aus benutzt werden. }
- VAR S:integer; { S ist lokale Variable der Funktion }
- BEGIN { Anweisungsteil der Funktion }
- REPEAT
- S:=Random(256) { Wähle S zufällig zwischen 0 und 255 }
- UNTIL S MOD 32 <> 0; { Schließe 0, 32, 64 usw. aus }
- ZufallsSchluessel:=S
- END; { Ende der Funktionsdefinition }
- {..............................................................}
- BEGIN { Anweisungsteil der Prozedur }
- W:=ZufallsSchluessel;
- FOR Stelle:=1 TO Length(Z) DO
- BEGIN
- Nr:=Ord(Z[Stelle]);
- IF Nr+W<256 THEN { Benutzt werden die druckbaren }
- Z[Stelle]:= Chr(Nr+W) { ASCII-Zeichen von 32 bis 255 }
- ELSE { (Bei 7-bit-Versionen entsprechend verändern!) }
- Z[Stelle]:= Chr(Nr+W-256+32)
- END
- END; { Ende der Prozedurdefinition Codiere }
- {--------------------------------------------------------------}
-
- PROCEDURE Decodiere(VAR Z:Zeile; W:Integer);
- { Übergabe von Z als Variable (by refrence),
- Übergabe von W als Wert nur zum Lesen (by value) }
- VAR Stelle: 1..N; { lokale Variable der }
- Nr : Integer; { Prozedur Decodiere }
- {Es gibt keine Verbindung zu den Variablen der ersten Prozedur.}
- BEGIN { Anweisungsteil der Prozedur }
- FOR Stelle:=1 TO Length(Z) DO
- BEGIN
- Nr:=Ord(Z[Stelle]);
- IF Nr-W>=32 THEN
- Z[Stelle]:= Chr(Nr-W)
- ELSE
- Z[Stelle]:= Chr(Nr-W+256-32)
- END
- END; { Ende der Prozedurdefinition Decodiere }
- {--------------------------------------------------------------}
-
- BEGIN { Anweisungsteil des Hauptprogramms }
- Write ('Verschlüsselung eines Textes durch ');
- WriteLn('einfache Verschiebung der Code-Nummern');
- WriteLn;
- WriteLn('Geben Sie eine Zeile Text ein:');
- WriteLn;
- ReadLn(Eingabe);
- Codiere(Eingabe,Schluessel); { Aufruf eines Unterprogramms }
- WriteLn(Eingabe, ' (Verschlüsselt mittels ',Schluessel,'.)');
- Decodiere(Eingabe,Schluessel); { Aufruf eines Unterprogramms }
- WriteLn(Eingabe, ' (Wieder entschlüsselt.)')
- END.