Autor Beitrag
schwegennagel
Hält's aus hier
Beiträge: 6

Win XP
D6 Prof
BeitragVerfasst: Fr 22.10.04 01:10 
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!
ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Fr 22.10.2004 um 08:42
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.
ausblenden 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.
ausblenden 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.
schwegennagel Threadstarter
Hält's aus hier
Beiträge: 6

Win XP
D6 Prof
BeitragVerfasst: Fr 22.10.04 10:42 
Titel: Alles klar
Das Problem hat sich erledigt. Vielen Dank!! :beer:
Luzzifus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 200

Win2K
D6 Prof
BeitragVerfasst: Fr 22.10.04 13:54 
na dann mal im ersten post auf das grüne häkchen klicken :wink: