Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi xor funktioniert nicht (https://www.delphipraxis.net/133538-xor-funktioniert-nicht.html)

mlhk 4. Mai 2009 10:07


xor funktioniert nicht
 
hey,
mein problem besteht darin, dass ich bei meiner xor-verschlüsselung nur mist raus bekomme, ich denke mal das liegt daran ich mit einen ganzen wort als schlüssel arbeiten will, was ich als string speichern muss, nun nimmt die funktion ord aber nur char, also schaut es euch mal an, wäre dankbar für rückmeldungen
Delphi-Quellcode:
function xorfunktion (text: Char;key:string): char;
begin
  Result := Char(Ord(text) xor Ord(key));
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  V, text: string;
  key: string;
  i,j: integer;
begin
    memo1.Clear;
    text := memo2.text;
    key := edit3.text;
    V := '';
  for i := 0 to Length(text) do
      begin
          for j := 0 to length(key) do
            begin
                  V := V+ xorfunktion (text[i], key[j]);
                  Application.ProcessMessages;
                  ProgressBar1.Position := i+j;
                  ProgressBar1.Update;
                memo1.Text := V;
                end;
      end;
  end;
diese progressbar füllt sich zum teil nicht ganz auf, soll das so sein?

DeddyH 4. Mai 2009 10:17

Re: xor funktioniert nicht
 
Du übergibst hier
Zitat:

Delphi-Quellcode:
V := V+ xorfunktion (text[i], key[j]);

ja bereits einzelne Zeichen. Was spricht also dagegen, aus dem Key-Parameter ein Char zu machen?

P.S.: Willkommen in der DP :dp:

jfheins 4. Mai 2009 10:21

Re: xor funktioniert nicht
 
Probiers mal so:

Delphi-Quellcode:
function xorfunktion (text: Char;key:char): char;
begin
  Result := Char(Ord(text) xor Ord(key));
// Nur 2 Chars miteinander xoren ! ord(string) sollte sowiso eine Fehlermeldung bringen!
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  V, text: string;
  key: string;
  i,keyindex: integer;
begin
  memo1.Clear;
  text := memo2.text;
  key := edit3.text;
  V := '';

  ProgressBar1.Max := length(text); // Progressbar einstellen

  for i := 1 to Length(text) do // Schleifengrenze korrigiert
  begin
    keyindex := i mod length(key) + 1 // Index des Schlüssels
    V := V + xorfunktion(text[i], key[keyindex]);
    ProgressBar1.Position := i; // .update nicht nötig
    Application.ProcessMessages;
  end;

  memo1.Text := V;
end;

mlhk 4. Mai 2009 10:27

Re: xor funktioniert nicht
 
ah gut danke, das funktioniertso einwandfrei, zu der frage warum ich key nicht gleich char gemacht habe, weil ich gleube char immer nur ein zeichen speichern kann ich aber erst mal den ganzen text da rein lesen muss

himitsu 4. Mai 2009 10:33

Re: xor funktioniert nicht
 
Zitat:

diese progressbar füllt sich zum teil nicht ganz auf, soll das so sein?
ja, soll so :angel:

Oder setz vorher mal das .Max der ProgressBar auf die länge des Strings :zwinker:


und nochmal was das Ord(key) angeht ... das Ord liefert da den internen Pointer des Strings und kein Zeichen aus diesem String :stupid:

mlhk 4. Mai 2009 10:51

Re: xor funktioniert nicht
 
sehr schön, noch kurz eine frage zur entschlüsselung, das xor sollte ja ansich gleich bleiben, nur die parameter ändern sich oder?

himitsu 4. Mai 2009 10:54

Re: xor funktioniert nicht
 
wenn du den Text nochmals mit dem selben Schlüssel genauso bearbeitest, dann kommt der ursprüngliche Text raus.

mlhk 4. Mai 2009 11:03

Re: xor funktioniert nicht
 
perfekt, dann bedanke ich mich für eure hilfe und schließe das thema ab

mfg
max

shmia 4. Mai 2009 12:22

Re: xor funktioniert nicht
 
Am Besten du nimmst eine sauber programmierte Funktion wie diese:
Delphi-Quellcode:
function StringXorCrypt(const text, key:string):string;
var
   i, j, keylen : Integer;
begin
   SetLength(Result, length(text));
   j := 1;
   keylen := Length(key);
   for i := 1 to Length(text) do
   begin
      Result[i] := chr(ord(text[i]) xor ord(key[j]));
      Inc(j);
      if j > keylen then j := 1;
   end;
end;
Auf den Progressbar kannst du verzichten, weil die Funktion so schnell ist, dass das Zeichnen des Progressbars mehr Zeit braucht als die eigentliche Operation.

SirThornberry 4. Mai 2009 12:27

Re: xor funktioniert nicht
 
Zitat:

Auf den Progressbar kannst du verzichten, weil die Funktion so schnell ist, dass das Zeichnen des Progressbars mehr Zeit braucht als die eigentliche Operation.
Das die Darstellung der Progressbar Zeit kostet stimmt. Aber das die eigentliche Zeit so gering ist das die Progressbar keinen Sinn macht hängt doch von der Datenmenge (Länge des Strings) ab und kann nicht pauschal beantwortet werden.
Man sollte jedoch überlegen ob es wirklich Sinn macht die Progressbar bei jedem Schleifendurchlauf zu aktuallisieren oder ob es nicht sinnvoller wäre diese nur einmal alle X Sekunden zu aktuallisieren oder alle X Schleifendurchläufe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz