Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi XOR (https://www.delphipraxis.net/154014-delphi-xor.html)

Saminem 25. Aug 2010 08:38

Delphi XOR
 
Habe ein Problem
Wenn ich etwas codieren will codiert er nicht alles warum bitte um antwort
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s , passwort: String;
  step , d:integer;
  i: Integer;
begin
  d:=0;
  passwort:=Edit1.text;
  s:=Memo1.Text;
  for i:=1 to length(s) do
  begin
    step:=Ord(passwort[d]);
    if
    d<length(passwort) then d:=d+1;
    if
    d>length(passwort) then d:=1 ;
    s[i]:=char(step Xor Ord(s[i]));
  end;
  Memo1.Text:=s;
  end;

himitsu 25. Aug 2010 08:40

AW: Delphi XOR
 
Spontan würde ich mal sagen du hast password und s verwechselt

Delphi-Quellcode:
if d<length(passwort) then d:=d+1;
if d>length(passwort) then d:=1 ;
s[i]:=char(Ord(s[i]) Xor Ord(passwort[d]));
PS: Dein Memo behandelt mit Sicherheit nicht alle Sonderzeichen so, wie du es willst ... heißt, wenn durch das XOR Zeichen zwischen #0 und #31 entstehen (also kleiner ' ' und vorallem bei #0, #10 und #13), dann wird da bestimmt das Ergebnis im Memo verfällscht und es läßt sich nicht mehr korrekt entschlüsseln.

Saminem 25. Aug 2010 08:48

AW: Delphi XOR
 
Danke für den Tipp mit dem Memo aber wenn ich s und passwort vertausche funktioniert des nicht.
Kommt kein vernünftiger text raus.

Aphton 25. Aug 2010 08:51

AW: Delphi XOR
 
Zitat:

Zitat von Saminem (Beitrag 1044734)
Habe ein Problem
Wenn ich etwas codieren will codiert er nicht alles warum bitte um antwort
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s , passwort: String;
  step , d:integer;
  i: Integer;
begin
  d:=0;
  passwort:=Edit1.text;
  s:=Memo1.Text;
  for i:=1 to length(s) do
  begin
    step:=Ord(passwort[d]);
    if
    d<length(passwort) then d:=d+1;
    if
    d>length(passwort) then d:=1 ;
    s[i]:=char(step Xor Ord(s[i]));
  end;
  Memo1.Text:=s;
  end;

Du initialisiert d mit 0, was beim ersten Schleifendurchlauf einen Fehler verursacht: step := Ord( passwort[d] ) -> Ord( passwort[>0<] ),
da Strings mit dem Index 1 beginnen und bei Length(String) aufhören.

Edit:
Die folgenden Zeilen lassen sich nur mit einem Befehl kürzen:
Delphi-Quellcode:
    if
    d<length(passwort) then d:=d+1;
    if
    d>length(passwort) then d:=1 ;

-->

  d := (d + 1) mod Length(passwort); // jedoch müsstest du "passwort[d+1]" verwenden. dann würde auch die Initialisierung mit d=0 stimmen.
Verbesserungsvorschlag:

Delphi-Quellcode:
var
  i, pLen: Integer;
  s: String;
begin
  s := Memo1.Text;
  pLen := Length( Edit1.Text );
  for i := 1 to Length( s ) do
    s[i] := Chr( Ord( s[i] ) xor Ord( Edit1.Text[((i-1) mod pLen)+1] ) );
  Memo1.Text := s;
end;

himitsu 25. Aug 2010 08:54

AW: Delphi XOR
 
Ups, auch noch vergessen den Index zu tauschen.
Delphi-Quellcode:
if d<length(passwort) then d:=d+1;
if d>length(passwort) then d:=1 ;
s[i]:=char(Ord(s[i]) Xor Ord(passwort[d]));
So wie du d initialisierst, mußt du erst nach den IFs auf dieses zugreifen, da sonst der Index nicht stimmt.

Ich empfehle die darum, in den Projektoptionen mal die Index- und die Bereichsprüfung zu aktivieren.

Stattdessen kannst du auch den Tipp von Aphton nehmen und die IFs weglassen:
Delphi-Quellcode:
s[i] := char(Ord(s[i]) Xor Ord(passwort[(i - 1) mod Length(passwort) + 1]));
.


Wie gesagt:
Schau mal im Debuger, was wirklich in S drinsteht.
Das Memo behandelt #10 und #13 anders ... aus #10 (LF) wird #13#10 (CRLF), aus #13 (CR) wird #13#10 (CRLF), aus #10#13 (LF+CR) wird #13#10#13#10 (CRLF+CRLF) und nur #13#10 (CRLF) bleibt #13#10
(CRLF).
Und bei #0 wird abgebrochen ... Stichwort PChar

DeddyH 25. Aug 2010 09:01

AW: Delphi XOR
 
Im ursprünglichen Code wurde der Fall
Delphi-Quellcode:
d = Length(Passwort)
auch nicht berücksichtigt.

shmia 25. Aug 2010 09:53

AW: Delphi XOR
 
Ich würde Dir dringend empfehlen, die Passwortverschlüsselung in eine eigene Funktion oder Methode zu packen.
Delphi-Quellcode:
function EncryptPasswordXOR(const passwort:string):string;
var
  ...
begin
  // dein Job hier
end;
Der Aufruf sieht dann so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text:= EncryptPasswordXOR(Edit1.text);
end;
So wird alles deutlich einfacher und klarer.

DeddyH 25. Aug 2010 09:55

AW: Delphi XOR
 
Aber dann mit 2 Parametern :zwinker:

Saminem 1. Sep 2010 09:43

AW: Delphi XOR
 
Hallo
Da das Memo das mit den Sonderzeichen nicht hinkriegt habe ich es in ein array rein geschrieben.
Wenn ich jetzt z.b. hallo codieren will mit sami (mein name).
Dann codiert er nur den ersten Bustaben also h mit s.
der zweite bustabe mit a mit a.
wenn ich hallo mit q codiere klappt es weil.
h mit q.
a mit q.
l mit q.
l mit q.
o mit q.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s , passwort , o: String;
  step , d ,b , n , m :integer;
  i , h : Integer;
begin
  b:=0;
  d:=1;
  passwort:=Edit1.text;
  s:=Memo1.text;
  for h:=1 to length(s) do
  Code[h]:=Ord(passwort[h]);
  for n:=1 to length(s) do
  Speicher[n]:=Ord(s[n]);
  for i:=1 to length(s) do
  begin
    step:=code[d];
    if d>length(code) then d:=1;
    inc(d);
    Speicher[i]:=step Xor Speicher[i];
    inc(b);
    end;
    for m:=1 to b do
    begin
    o:=o+chr(Speicher[m]);
    end;
    Memo1.text:=o;
    end;
bitte um hilfe

p80286 1. Sep 2010 12:06

AW: Delphi XOR
 
Alleine dieses Konstrukt schreit doch nach Fehlermeldungen:
Delphi-Quellcode:
for h:=1 to length(s) do
  Code[h]:=Ord(passwort[h]);
1) aus welcher dunklen Ecke kommt Code gekrochen?
2) wenn h von der Länge von s abhängig ist, dann muß passwort mindestens so lang wie s sein, sonst rappelt es im Karton.
Und wenn es nicht rappelt (Fehlermeldungen abgeschaltet?) dann läuft wieder einmal ein Programm Amok und es tauchen vollkommen unerklärliche Fehler auf.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 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