schwegennagel - Fr 22.10.04 01:10
Titel: Problem mit for to do Schleifen
Hallo, ich(Anfänger) habe ein kleines Problem mit 2 for to do Schleifen. Der Code ist ein Teil von einem Verschlüsselungsprogramm. Das Programm soll den in Memofeld1 eingegebenen Text verschlüsseln, indem der Text in Zahlen umgewandelt wird und diesem anschließend der Zahlenwert vom jeweilligen Zeichen des Geheimwortes hinzuaddiert wird. Das Ergebniss soll in Memofeld2 stehen. Ich bekomme als Ergebniss viel zu viele Zeichen. Geheimwort ist ein String
aus einem Edit-Feld. Würde mich sehr über Hilfe freuen!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Verschlsseln1Click(Sender: TObject); var i,k,u:integer; begin for i:=0 to memo1.Lines.Count-1 do begin begin str:=''; for k:=1 to length(memo1.Lines[i]) do for u:=1 to length(geheimwort) do str:=str+chr(ord(memo1.lines[i][k])+ord(geheimwort[u])); end; end; memo2.lines.add(str); end; |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.Moderiert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am Fr 22.10.2004 um 08:42
Lossy eX - Fr 22.10.04 07:08
Hi. Das Problem liegt in deiner Berechnung und ein bisschen in den Schleifen.
Du addierst für jedes Zeichen in der Zeile und für jedes Zeichen in dem Geheimwort einen Buchstaben zu deinem
Str. Damit machst du aus jedem Zeichen in deinem Ursprungstext so viele wie in deinem Geheimwort enthalten sind.
Um das zu umgehen müsstest du das in etwas so machen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for k := 1 to length(memo1.Lines[i]) do begin Temp := Ord(memo1.lines[i][k]); for u := 1 to length(geheimwort) do begin Temp := Temp + ord(geheimwort[u]); end; Str := Str + Chr(Temp); end; |
Temp ist ein Byte.
Allerdings beinhält die Methode ein weiteres Problem. Wenn du ständig einen Wert zu Temp hinzurechnest, dann wird irgendwo dein wert abgeschnitten, weil du nur maximal 256 mögliche Werte in einem Char ablegen kannst. Bei eingeschalteter Bereichsprüfung würdest du so auch einen Fehler bekommen-
Ich würde eher auf so etwas tendieren.
Delphi-Quelltext
1:
| Temp := Temp xor ord(geheimwort[u]); |
Dadurch werden die gesetzten Bits in dem Buchstaben von dem Geheimwort in Temp negiert. Und du hast keinen Überlauf deiner Variable. Das ergebnoiss dürfte aber auch verschlüsselt genug aussehen.
PS: Du solltest dir sinnvolle Variablennamen angewöhnen. Das macht es uns und dir, wenn du später (1-2 Jahre) in deinen Code schaust, leichter deinen Code zu lesen und zu verstehen.