C# Caesarverschlüsselung programmieren?

4 Antworten

Naja, du rechnest doch

      char Verschlüsselter_Buchstabe = (originalbuchstabe + offset);

und das obwohl "originalbuchstabe" ein char ist.

Du musst char erst in int konvertieren, darauf addieren, und abschließend wieder int in char.

Das geht so

char a = 'a';

int x = (int)a;

x+=2;

char c = (char)x;

Liebe Grüße

_

Nur ein Hinweis: So läuft der Cäsar-Code nicht. Die Codierung von "Z" ist nämlich "B" und nicht '\' (Der Offset bei Cäsar ist immer 3).

itSo funktioniert das jedenfalls sicher nicht.

Du versuchst einen char mit einem int zu addieren. Das funktioniert natürlich nicht.

Außerdem wird durch diesen Algorithmus nicht sichergestellt, das der verschlüsselte Buchstabe weiterhin im Bereich des Alphabets befindlich ist.

Wird bei der Addition des Offsets der 26. Buchstabe überschritten, muss wieder bei "A" begonnen werden.

Der Algorithmus für die Verschlüsselung eines chars sieht demnach wie folgt aus:

int buchstabe = Convert.ToInt32(<char>);
buchstabe -= 65; //für Kleinbuchstaben 97 einsetzen
buchstabe += offset;
buchstabe %= 26;
buchstabe += 65;
<char> = (char)buchstabe;

HardwareGuru99  23.03.2018, 21:28

Im Unicode hat "A" die 65, wenn man das Zeichen also in einen int konvertiert erhält man diese Zahl.

Damit es bei der Modulo-Operation nicht zu einem Fehler kommt muss diese zunächst subtrahiert und anschließend wieder addiert werden.

Für Kleinbuchstaben wäre dies die 97.

Lässt man diesen Schritt weg, kann man Zeichen erhalten, welche bei einer weiteren Verarbeitung/Ausgabe Probleme bereiten.

0