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.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.