home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 01 / chiffre.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1986-11-25  |  2.9 KB  |  102 lines

  1. {---------------------------------------------------------------------------}
  2. { Ein Programm zum chiffrieren/dechiffrieren von Text-Dateien.
  3.   Als Chiffre wird eine ganze, pos. Zahl erwartet. Zum dechiffrieren ist die
  4.   entsprechende negative Zahl einzugeben.                                   }
  5. {---------------------------------------------------------------------------}
  6.  
  7. PROGRAM chiffre_test;
  8.  
  9. CONST pi = 3.141592654;
  10.  
  11. TYPE filename = STRING[20];
  12.  
  13. VAR name: filename;
  14.     seed: REAL;
  15.     chiffre: INTEGER;
  16.  
  17. {---------------------------------------------------------------------------}
  18. { Zufallszahlen-Generator fuer reproduzierbare Folgen:                      }
  19.  
  20. FUNCTION random: REAL;
  21.  
  22. BEGIN
  23.   seed := seed - Trunc(seed);
  24.   random := seed;
  25.   seed := 997 * seed + pi;
  26. END;
  27.  
  28. {---------------------------------------------------------------------------}
  29. { Hier wird chiffriert und dechiffriert.                                    }
  30.  
  31. PROCEDURE chiffredatei (qname: filename; chiffre: INTEGER; list: BOOLEAN);
  32.  
  33. CONST blank = 32;                                { ASCII-Code: Leerzeichen  }
  34.       tilde = 126;                               { ASCII-Code: Tilde, Eszet }
  35.  
  36. VAR zname: filename;
  37.     quelle, ziel: TEXT;
  38.     code, dist: INTEGER;
  39.     zeichen: CHAR;
  40.  
  41. BEGIN
  42.   seed := abs(chiffre / pi);
  43.   Assign(quelle, qname);
  44.   Reset(quelle);
  45.   zname := Copy(qname, 1, pos('.', qname));        { Dateiname 'abspalten'. }
  46.   zname := Concat(zname, 'chf');              { Dateityp fuer chiff. Datei. }
  47.   Assign(ziel, zname);
  48.   ReWrite(ziel);
  49.   IF list THEN
  50.     WriteLn('chiffrierter/dechiffrierter Text:');
  51.   WHILE NOT (Eof(quelle)) DO
  52.   BEGIN
  53.     WHILE NOT Eoln(quelle) DO BEGIN
  54.       Read(quelle, zeichen);
  55.       dist := Trunc(random * 94);
  56.       code := Ord(zeichen);
  57.       IF (code > blank) AND (code <= tilde) THEN
  58.         IF chiffre > 0 THEN
  59.           code := 33 + (code + 61 + dist) MOD 94
  60.         ELSE
  61.           code := 33 + (code + 61 - dist) MOD 94;
  62.       Write(ziel, Chr(code));
  63.       IF list THEN
  64.         Write(Chr(code));
  65.     END;
  66.     WriteLn(ziel);
  67.     IF list THEN
  68.       WriteLn;
  69.     ReadLn(quelle);
  70.   END;
  71.   WriteLn;
  72.   Close(quelle);
  73.   Close(ziel);
  74.   IF list THEN
  75.   BEGIN
  76.     Write('Quelle loeschen und Ziel umbenennen? (j,n) ');
  77.     REPEAT
  78.       ReadLn(zeichen);
  79.     UNTIL zeichen IN ['j','J','n','N'];
  80.   END;
  81.   IF (zeichen IN ['j','J']) OR NOT (list) THEN
  82.   BEGIN
  83.     Erase(quelle);
  84.     Rename(ziel,qname);
  85.     IF list THEN
  86.       Write('Quelle geloescht und Ziel umbenannt.');
  87.   END;
  88.   IF list THEN
  89.     WriteLn;
  90. END;
  91.  
  92. {---------------------------------------------------------------------------}
  93.  
  94. BEGIN {Demo}
  95.   WriteLn('*** Chiffrierprogramm VPas1.2 04.09.86');
  96.   WriteLn;
  97.   Write('Dateiname: ');   ReadLn(name);
  98.   Write('Chiffre:   ');   ReadLn(chiffre);
  99.   chiffredatei(name, chiffre, TRUE);
  100.   WriteLn('*** Ende des Chiffrierprogramms');
  101. END.
  102.