Hallo,
ich habe ein Problem beim Programmieren einer Caesar-Verschlüsselung:
Nochmal zur Erinnerung: Bei dieser Verschlüsselung wird, wenn man bspw. den Schlüssel B eingibt aus dem Wort "Hallo" -> "IBMMP" , also eine Verschiebung um ein Buchstabe. Wenn C der Schlüssel wäre, dann müsste man das Wort um 2 Buchstaben verschieben.
Also gilt immer A = (der eingebene Schlüssel, z.B. B)
B = C
C = D etc....
Das Programm verschlüsselt die Buchstaben zwar meistens korrekt, aber ich arbeite mit einem ASCII System, was bedeutet, dass er das Z immer falsch verschlüsselt, da er daraus nicht wieder einen normalen Buchstaben, sondern ein Sonderzeichen (z.B. "$§) des ASCII Systems macht.
Ich weiß, dass ich dafür eine if-Bedingung brauch, die ausschließt das der Wert "90" überschritten wird (90 -> Sonderzeichen beginnen), und ich weiß auch, dass man den eingegeben Wert - 26 rechnen muss. Aber irgendwie funktioniert das bei mir nicht, weil ich nicht weiß an welcher Stelle diese Bedingung rein muss.
Darum gebe ich euch hier mal den Quelltext [noch ohne die oben erklärte bedingung]:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.BtDecodeClick(Sender: TObject); var z,i, x2,x3:integer; x4:char; begin key := EdSch.Text; x := ord(key[1]) - 65; eingabe := uppercase(EdEingabe.Text); for i := 1 to length(eingabe) do begin x2 := ord(eingabe[i]);
if x2 <> 32 then begin
x3 := x2+x; x4 := Chr(x3); eingabe[i] := x4; end; end; end; EdGeheim.Text := eingabe; end; |
Könntet ihr mir nun sagen, wie genau die Bedingung aussehen muss und an welcher Stelle sie rein muss? Ich bedanke mich schon mal im Vorraus und hier noch als Hilfe ein ASCII Tabelle:
www.torsten-horn.de/techdocs/ascii.htm
Vielen Dank!