Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi xor, was ist falsch? (https://www.delphipraxis.net/78789-xor-ist-falsch.html)

Angel4585 11. Okt 2006 07:48


xor, was ist falsch?
 
Hallo,

ich hab folgendes:

Delphi-Quellcode:
const cschluessel = 'asdfghjkl';


function DoCrypt(AText : string):string;
var
  i : integer;
begin
for i:= 1 to Length(AText) do
  AText[i]:= Chr(Ord(cschluessel[Succ(i mod Length(cschluessel))]) xor Ord(AText[i]));
Result:=AText;
end;

irgendwoe hat sich da ein Fehler eingeschlichen, es wird zwar verschlüsselt, aber nichtmehr korrekt entschlüsselt. Hab ich da einen Denkfehler?

Der String der übergeben wird ist der Inhalt einer INi-Datei den ich in eine Stringlist lade. Also Stringlist.Text

:angel:

Angel4585 11. Okt 2006 08:06

Re: xor, was ist falsch?
 
Delphi-Quellcode:
const cschluessel = 'asdfghjkl';


function DoCrypt(AText : string):string;
var
  i : integer;
begin
for i:= 1 to Length(AText) do
  AText[i]:= Chr(Ord(cschluessel[i mod Length(cschluessel)]) xor Ord(AText[i]));
Result:=AText;
end;

so gehts :shock:

muss ich cschluessel nicht von 1 bis Length(csschluessel) ansprechen?
ist doch ein string oder?
wenn ich von 0 bis Pred(Length(cschluessel)) gehts :wall:

Corpsman 11. Okt 2006 08:20

Re: xor, was ist falsch?
 
Also sei mir nich bös, aber bei mir gehts so net.


Delphi-Quellcode:

Procedure TForm1.Button1Click(Sender: TObject);
Var
  l: Tstringlist;
Begin
  l := Tstringlist.create;
  l.text := Memo1.Lines.Text;
  l.text := Docrypt(l.text);
  memo1.lines.text := l.text;
  l.free;
End;

marabu 11. Okt 2006 08:22

Re: xor, was ist falsch?
 
Hallo Martin,

dein Fehler steckt in deiner Indexberechnung:

Delphi-Quellcode:
// Succ(i mod Length(cSchlussel))
   Succ(Pred(i) mod Length(cSchluessel))
Delphi-Quellcode:
function XorStr(const s, key: String): String;
var
  i, iKey: Integer;
begin
  SetLength(Result, Length(s));
  iKey := 0;
  for i := 1 to Length(s) do
  begin
    iKey := Succ(iKey mod Length(key));
    Result[i] := Chr(Ord(key[iKey]) xor Ord(s[i]));
  end;
end;
Grüße vom marabu


@Uwe: Probiere es mal so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := XorStr(Memo1.Text, cSchluessel);
  Memo1.Text := XorStr(s, cSchluessel);
End;
Oder auch mit DoCrypt() - wenn der Fehler draußen ist.

Angel4585 11. Okt 2006 08:28

Re: xor, was ist falsch?
 
@marabu:Warum spielt das eine Rolle? Ich fang beim verschlüsseln und beim entschlüsseln beim selben index an, also dürfte das kein unterschied machen oder?


Zitat:

Zitat von Corpsman
Also sei mir nich bös, aber bei mir gehts so net.


Delphi-Quellcode:

Procedure TForm1.Button1Click(Sender: TObject);
Var
  l: Tstringlist;
Begin
  l := Tstringlist.create;
  l.text := Memo1.Lines.Text;
  l.text := Docrypt(l.text);
  memo1.lines.text := l.text;
  l.free;
End;

Du schreibst die verschlüsselte version ins Memo, du musst ert weider ENTschlüsseln ;)

Corpsman 11. Okt 2006 08:31

Re: xor, was ist falsch?
 
@marabu

Das kann aber auch nicht wirklich funktionieren,

Da wenn Ikey = Length(Key) -> Ikey := -1; geschieht. Das wäre dann ein wenig Fatal. Bei mir hat es jedenfalls auch nicht getan.

Aber mit :

Delphi-Quellcode:
Const
  cschluessel = 'asdfghjkl';

Function DoCrypt(AText: String): String;
Var
  i: integer;
Begin
  For i := 1 To Length(AText) Do
    AText[i] := Chr(Ord(cschluessel[i Mod Length(cschluessel) + 1]) Xor Ord(AText[i]));
  Result := AText;
End;

..

Procedure TForm1.Button1Click(Sender: TObject);
Var
  s: String;
Begin
  s := DoCrypt(Memo1.Text);
  Memo1.Text := s;
End;
Funktionierts echt gut.

@Angel

Mus ich nicht wenn ich 2 mal auf den Button Clicke

marabu 11. Okt 2006 08:39

Re: xor, was ist falsch?
 
@Martin:

dein Code funktioniert zwar (zufällig), aber er benutzt das Byte vor dem Schlüssel - das letzte Zeichen im Schlüssel allerdings nie.

Ein 1-n-Ring wird nunmal mit Succ(i mod n) gebildet und ein 0-n-Ring mit Succ(i) mod Succ(n).



@Uwe:
Zitat:

Zitat von Corpsman
Das kann aber auch nicht wirklich funktionieren

hast du es ausprobiert?

Grüße

PS: Schreibfehler korrigiert - hatte Pred() aus meinem ersten Beitrag kopiert...

Corpsman 11. Okt 2006 08:46

Re: xor, was ist falsch?
 
Ich Habe es getestet:

mit :

Delphi-Quellcode:
Const
  cschluessel = 'asdfghjkl';

Function DoCrypt(AText: String): String;
Var
  i: integer;
Begin
  For i := 1 To Length(AText) Do
    AText[i] := Chr(Ord(cschluessel[i Mod Length(cschluessel) + 1]) Xor Ord(AText[i]));
  Result := AText;
End;
und
Delphi-Quellcode:
Const
  cschluessel = 'asdfghjkl';
Function DoCrypt(AText: String): String;
Var
  i: integer;
Begin
  For i := 1 To Length(AText) Do
    AText[i] := Chr(Ord(cschluessel[i Mod Length(cschluessel)]) Xor Ord(AText[i]));
  Result := AText;
End;
und Memo1.text = 'Hallo Welt';


Es hat beidesmal geklappt ;)

allein das ist schon "Komisch"

Angel4585 11. Okt 2006 08:51

Re: xor, was ist falsch?
 
also wenn die länge 4 beträgt, sieht die reihenfolge der indexe wenn ich i nicht eins veringere(meine version) doch so aus:

1,2,3,0,1,2,3,0,1,2,3,...


wenn ich i verringere(deine version) so:

0,1,2,3,0,1,2,3,...

oder nicht?

Das sollte doch trotzdem funktionieren, da ich beim VERschlüsseln und beim ENTschlüsseln immer das selbe verwende.

@Uwe: probier längere strings und mehr zeilen

Corpsman 11. Okt 2006 08:55

Re: xor, was ist falsch?
 
Hmm also wenn ich deutlich Längere Passwörter Nehme ist es Klar

nur
Delphi-Quellcode:

Const
  cschluessel = 'asdfghjkl';

Function DoCrypt(AText: String): String;
Var
  i: integer;
Begin
  For i := 1 To Length(AText) Do
    AText[i] := Chr(Ord(cschluessel[i Mod Length(cschluessel)]) Xor Ord(AText[i]));
  Result := AText;
End;
Geht. Allerdings würde das Bedeuten das Delphi die Stringkonstante in einen Array of Char baut der dann INdex 0..Length -1 hat merkwürdig.


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