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; |
AW: Delphi XOR
Spontan würde ich mal sagen du hast password und s verwechselt
Delphi-Quellcode:
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.
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])); |
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. |
AW: Delphi XOR
Zitat:
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:
Verbesserungsvorschlag:
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.
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; |
AW: Delphi XOR
Ups, auch noch vergessen den Index zu tauschen.
Delphi-Quellcode:
So wie du d initialisierst, mußt du erst nach den IFs auf dieses zugreifen, da sonst der Index nicht stimmt.
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])); 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 |
AW: Delphi XOR
Im ursprünglichen Code wurde der Fall
Delphi-Quellcode:
auch nicht berücksichtigt.
d = Length(Passwort)
|
AW: Delphi XOR
Ich würde Dir dringend empfehlen, die Passwortverschlüsselung in eine eigene Funktion oder Methode zu packen.
Delphi-Quellcode:
Der Aufruf sieht dann so aus:
function EncryptPasswordXOR(const passwort:string):string;
var ... begin // dein Job hier end;
Delphi-Quellcode:
So wird alles deutlich einfacher und klarer.
procedure TForm1.Button1Click(Sender: TObject);
begin Memo1.Text:= EncryptPasswordXOR(Edit1.text); end; |
AW: Delphi XOR
Aber dann mit 2 Parametern :zwinker:
|
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:
bitte um hilfe
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; |
AW: Delphi XOR
Alleine dieses Konstrukt schreit doch nach Fehlermeldungen:
Delphi-Quellcode:
1) aus welcher dunklen Ecke kommt Code gekrochen?
for h:=1 to length(s) do
Code[h]:=Ord(passwort[h]); 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. |
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