home *** CD-ROM | disk | FTP | other *** search
- {---------------------------------------------------------------------------}
- { Ein Programm zum chiffrieren/dechiffrieren von Text-Dateien.
- Als Chiffre wird eine ganze, pos. Zahl erwartet. Zum dechiffrieren ist die
- entsprechende negative Zahl einzugeben. }
- {---------------------------------------------------------------------------}
-
- PROGRAM chiffre_test;
-
- CONST pi = 3.141592654;
-
- TYPE filename = STRING[20];
-
- VAR name: filename;
- seed: REAL;
- chiffre: INTEGER;
-
- {---------------------------------------------------------------------------}
- { Zufallszahlen-Generator fuer reproduzierbare Folgen: }
-
- FUNCTION random: REAL;
-
- BEGIN
- seed := seed - Trunc(seed);
- random := seed;
- seed := 997 * seed + pi;
- END;
-
- {---------------------------------------------------------------------------}
- { Hier wird chiffriert und dechiffriert. }
-
- PROCEDURE chiffredatei (qname: filename; chiffre: INTEGER; list: BOOLEAN);
-
- CONST blank = 32; { ASCII-Code: Leerzeichen }
- tilde = 126; { ASCII-Code: Tilde, Eszet }
-
- VAR zname: filename;
- quelle, ziel: TEXT;
- code, dist: INTEGER;
- zeichen: CHAR;
-
- BEGIN
- seed := abs(chiffre / pi);
- Assign(quelle, qname);
- Reset(quelle);
- zname := Copy(qname, 1, pos('.', qname)); { Dateiname 'abspalten'. }
- zname := Concat(zname, 'chf'); { Dateityp fuer chiff. Datei. }
- Assign(ziel, zname);
- ReWrite(ziel);
- IF list THEN
- WriteLn('chiffrierter/dechiffrierter Text:');
- WHILE NOT (Eof(quelle)) DO
- BEGIN
- WHILE NOT Eoln(quelle) DO BEGIN
- Read(quelle, zeichen);
- dist := Trunc(random * 94);
- code := Ord(zeichen);
- IF (code > blank) AND (code <= tilde) THEN
- IF chiffre > 0 THEN
- code := 33 + (code + 61 + dist) MOD 94
- ELSE
- code := 33 + (code + 61 - dist) MOD 94;
- Write(ziel, Chr(code));
- IF list THEN
- Write(Chr(code));
- END;
- WriteLn(ziel);
- IF list THEN
- WriteLn;
- ReadLn(quelle);
- END;
- WriteLn;
- Close(quelle);
- Close(ziel);
- IF list THEN
- BEGIN
- Write('Quelle loeschen und Ziel umbenennen? (j,n) ');
- REPEAT
- ReadLn(zeichen);
- UNTIL zeichen IN ['j','J','n','N'];
- END;
- IF (zeichen IN ['j','J']) OR NOT (list) THEN
- BEGIN
- Erase(quelle);
- Rename(ziel,qname);
- IF list THEN
- Write('Quelle geloescht und Ziel umbenannt.');
- END;
- IF list THEN
- WriteLn;
- END;
-
- {---------------------------------------------------------------------------}
-
- BEGIN {Demo}
- WriteLn('*** Chiffrierprogramm VPas1.2 04.09.86');
- WriteLn;
- Write('Dateiname: '); ReadLn(name);
- Write('Chiffre: '); ReadLn(chiffre);
- chiffredatei(name, chiffre, TRUE);
- WriteLn('*** Ende des Chiffrierprogramms');
- END.