vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbacknächstes Kapitel


Eingeben & Ausführen

Tag 3

Geheime Botschaften

Dies ist das dritte Eingeben&Ausführen-Programm. Es enthält viele Elemente, insbesondere von Tag 15, »Mit Dateien arbeiten«.

Das Programm ermöglicht Ihnen, geheime Botschaften zu codieren und zu decodieren. Wenn Sie das Programm aufrufen, müssen Sie zwei Befehlszeilenparameter mit angeben:

codierer dateiname aktion

Dabei ist dateiname entweder der Name der Datei, die Sie erzeugen, um die neue geheime Botschaft aufzunehmen, oder der Name einer Datei, die die geheime zu decodierende Botschaft enthält. Als aktion können Sie entweder D für Decodieren oder C für Codieren einer geheimen Botschaft angeben. Wenn Sie das Programm ohne die Übergabe dieser Parameter ausführen, erhalten Sie Anweisungen, wie Sie die Parameter korrekt einzugeben haben.

Da dieses ein Programm zum Codieren und Decodieren von Botschaften ist, können Sie Kopien davon an Ihre Freunde und Bekannten weiterreichen, um geheime Botschaften zu verschlüsseln und auszutauschen. Botschaften, die Sie zurückbekommen, können Sie mit dem Programm entziffern. Jemand, der das Programm nicht hat, kann die Botschaften in den Dateien nicht lesen!

E&A-Listing 3. Codierer.c.

1 : /* Program:  codierer.c
2 : * Aufruf: codierer [dateiname] [aktion]
3 : * dateiname = Dateiname für/mit codierten Daten
4 : * aktion = D zum Decodieren und alles andere zum
5 : * Codieren
6 : * - - - - - - - - - - - - - - - - - - - - - - - */
7 :
8 : #include <stdio.h>
9 : #include <stdlib.h>
10: #include <string.h>
11:
12: int zeichen_codieren( int ch, int wert );
13: int zeichen_decodieren( int ch, int wert );
14:
15: int main( int argc, char *argv[])
16: {
17: FILE *fh; /* Datei-Handle */
18: int rv = 1; /* Rückgabewert */
19: int ch = 0; /* Variable zur Aufnahme eines Zeichens */
20: unsigned int ctr = 0; /* Zähler */
21: int wert = 5; /* Wert, mit dem codiert wird */
22: char puffer[256]; /* Puffer */
23:
24: if( argc != 3 )
25: {
26: printf("\nFehler: Falsche Anzahl an Parametern..." );
27: printf("\n\nVerwendung:\n %s dateiname aktion", argv[0]);
28: printf("\n\n Wobei:");
29: printf("\n dateiname = zu codierende/decodierende Datei");
30: printf("\n aktion = D zum Decodieren, C zum Codieren\n\n");
31: rv = -1; /* Rückgabewert */
32: }
33: else
34: if(( argv[2][0] == 'D') || (argv [2][0] == 'd' )) /*decodieren*/
35: {
36: fh = fopen(argv[1], "r"); /* öffnet die Datei */
37: if( fh <= 0 ) /* prüft auf Fehler */
38: {
39: printf( "\n\nFehler beim Öffnen der Datei..." );
40: rv = -2; /* Fehlercode setzen */
41: }
42: else
43: {
44: ch = getc( fh ); /* liest ein Zeichen ein */
45: while( !feof( fh ) ) /* prüft das Ende der Datei */
46: {
47: ch = zeichen_decodieren( ch, wert );
48: putchar(ch); /* schreibt das Zeichen auf den Bildschirm */
49: ch = getc( fh);
50: }
51:
52: fclose(fh);
53: printf( "\n\nDatei auf dem Bildschirm decodiert.\n" );
54: }
55: }
56: else /* Codierung */
57: {
58:
59: fh = fopen(argv[1], "w");
60: if( fh <= 0 )
61: {
62: printf( "\n\nFehler beim Erzeugen der Datei..." );
63: rv = -3; /* Fehlercode setzen */
64: }
65: else
66: {
67: printf("\n\nZu codierenden Text eingeben. ");
68: printf("Mit Leerzeile beenden.\n\n");
69:
70: while( fgets(puffer, 256, stdin) != NULL )
71: {
72: if( strlen (puffer) <= 1 )
73: break;
74:
75: for( ctr = 0; ctr < strlen(puffer); ctr++ )
76: {
77: ch = zeichen_codieren( puffer[ctr], wert );
78: ch = fputc(ch, fh); /*Zeichen in die Datei schreiben*/
79: }
80: }
81: printf( "\n\nDatei codiert.\n" );
82: fclose(fh);
83: }
84:
85: }
86: return (rv);
87: }
88:
89: int zeichen_codieren( int ch, int wert )
90: {
91: ch = ch + wert;
92: return (ch);
93: }
94:
95: int zeichen_decodieren( int ch, int wert )
96: {
97: ch = ch - wert;
98: return (ch);
99: }

Sehen Sie im Folgenden ein Beispiel für eine geheime Botschaft:

Injx%nxy%jnsj%ljmjnrj%Gtyxhmfky

Decodiert lautet diese Botschaft:

Dies ist eine geheime Botschaft!

Dieses Programm codiert und decodiert die Informationen einfach dadurch, dass es einen Wert vom eingegebenen Zeichen subtrahiert oder dazu addiert. Dieser Code ist ziemlich einfach zu »knacken«. Wenn Sie den Code weiter erschweren wollen, dann ersetzen Sie die Zeilen 91 und 97 durch:

ch = ch ^ wert;

Dadurch werden Ihre geheimen Botschaften noch geheimer! (Siehe Lektion 18, »Vom Umgang mit dem Speicher«, zur Verwendung der Bit-Operatoren.)

Wenn Sie beabsichtigen, das Programm an viele verschiedene Leute weiterzureichen, können Sie auch einen dritten Parameter für die Befehlszeile vorgeben, der einen Wert für wert akzeptieren. Die Variable wert speichert dann diesen Wert, der zum Codieren und Decodieren verwendet wird.



vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbackKapitelanfangnächstes Kapitel


© Markt&Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH