home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 12 / colleg / pascol12.lst < prev   
Encoding:
File List  |  1988-09-20  |  3.5 KB  |  78 lines

  1.  
  2.  
  3. {---------------------------------------------------------------
  4.                      Pascal Colleg
  5.   Demonstration eines primitiven Verfahrens zur Verschlüsselung
  6.     einer Textzeile und der Rückübersetzung in den Klartext
  7.         (C) 1988 TOOLBOX 12'88 & Wolfgang J. Weber
  8. ---------------------------------------------------------------}
  9.  
  10. PROGRAM GeheimerCode (Input, Output);              { Kopfzeile }
  11.  
  12. CONST N       = 80;                           { Globale Kon-   }
  13. TYPE Zeile    = String[N];                    { stanten, Typ-  }
  14. VAR Eingabe   : Zeile;                        { und Variablen- }
  15.     Schluessel: Integer;                      { Vereinbarungen }
  16. {--------------------------------------------------------------}
  17.  
  18. PROCEDURE Codiere(VAR Z:Zeile; VAR W:Integer);
  19.          { Übergabe von Z und von W als Variable (by refrence) }
  20. VAR Stelle: 1..N;                  { Stelle und Nr sind lokale }
  21.     Nr    : Integer;             { Variable für diese Prozedur }
  22. {..............................................................}
  23. FUNCTION ZufallsSchluessel: Integer; { Funktion ohne Parameter }
  24. { Diese Funktion ist lokales Objekt der Prozedur Codiere; sie
  25.   kann weder von der Prozedur Decodiere noch vom Hauptprogramm
  26.   aus benutzt werden.                                          }
  27. VAR S:integer;            { S ist lokale Variable der Funktion }
  28. BEGIN                            { Anweisungsteil der Funktion }
  29.   REPEAT
  30.     S:=Random(256)       { Wähle S zufällig zwischen 0 und 255 }
  31.   UNTIL S MOD 32 <> 0;           { Schließe 0, 32, 64 usw. aus }
  32.   ZufallsSchluessel:=S
  33. END;                            { Ende der Funktionsdefinition }
  34. {..............................................................}
  35. BEGIN                            { Anweisungsteil der Prozedur }
  36.   W:=ZufallsSchluessel;
  37.   FOR Stelle:=1 TO Length(Z) DO
  38.     BEGIN
  39.       Nr:=Ord(Z[Stelle]);
  40.       IF Nr+W<256 THEN         { Benutzt werden die druckbaren }
  41.         Z[Stelle]:= Chr(Nr+W)   { ASCII-Zeichen von 32 bis 255 }
  42.       ELSE     { (Bei 7-bit-Versionen entsprechend verändern!) }
  43.         Z[Stelle]:= Chr(Nr+W-256+32)
  44.     END
  45. END;                     { Ende der Prozedurdefinition Codiere }
  46. {--------------------------------------------------------------}
  47.  
  48. PROCEDURE Decodiere(VAR Z:Zeile; W:Integer);
  49.                   { Übergabe von Z als Variable (by refrence),
  50.               Übergabe von W als Wert nur zum Lesen (by value) }
  51. VAR Stelle: 1..N;                        { lokale Variable der }
  52.     Nr    : Integer;                      { Prozedur Decodiere }
  53. {Es gibt keine Verbindung zu den Variablen der ersten Prozedur.}
  54. BEGIN                            { Anweisungsteil der Prozedur }
  55.   FOR Stelle:=1 TO Length(Z) DO
  56.     BEGIN
  57.       Nr:=Ord(Z[Stelle]);
  58.       IF Nr-W>=32 THEN
  59.         Z[Stelle]:= Chr(Nr-W)
  60.       ELSE
  61.         Z[Stelle]:= Chr(Nr-W+256-32)
  62.     END
  63. END;                   { Ende der Prozedurdefinition Decodiere }
  64. {--------------------------------------------------------------}
  65.  
  66. BEGIN                      { Anweisungsteil des Hauptprogramms }
  67.   Write  ('Verschlüsselung eines Textes durch ');
  68.   WriteLn('einfache Verschiebung der Code-Nummern');
  69.   WriteLn;
  70.   WriteLn('Geben Sie eine Zeile Text ein:');
  71.   WriteLn;
  72.   ReadLn(Eingabe);
  73.   Codiere(Eingabe,Schluessel);   { Aufruf eines Unterprogramms }
  74.   WriteLn(Eingabe, '  (Verschlüsselt mittels ',Schluessel,'.)');
  75.   Decodiere(Eingabe,Schluessel); { Aufruf eines Unterprogramms }
  76.   WriteLn(Eingabe, '  (Wieder entschlüsselt.)')
  77. END.
  78.