Zitat von
fortuneNext:
Ich habe die letzte Woche ziemlich lange nach dem Problem gesucht, jedoch nichts gefunden. Kann vielleicht zumindest jemand einen Denkansatz geben, wo ca. das Problem sein könnte?
Delphi-Quellcode:
if not x = length(text) then
Result := Result + char(Alg_RC4.sandbox[(Alg_RC4.sandbox[i] + Alg_RC4.sandbox[j]) mod length(Alg_RC4.sandbox)] xor ord(text[x + 1]))
else
Result := Result + char(Alg_RC4.sandbox[(Alg_RC4.sandbox[i] + Alg_RC4.sandbox[j]) mod length(Alg_RC4.sandbox)]);
end;
end;
Nur ein paar Ratschläge und Hinweise:
- Das ganze Teil ist viel zu kompliziert und unübersichtlich, normalerweise is RC4 für seine verführerische Einfachheit bekannt.
- Es sollte zu denken geben, wenn Fallunterscheidungen und Sonderbehandlungen im Code auftauchen, die im Algorithmus nicht vorhanden sind.
- Operatoren-Prioritäten sollten beachtet werden: "not x = length(text)" ist sicherlich nicht das was Du willst. Allerdings hätte eine einfache Session mit dem Debugger das auch gezeigt.
Jedenfalls läuft das ganze, wenn man folgende ändert:
Delphi-Quellcode:
function Crypt(text: string):string;
var
i, x:integer;
j, swap:byte;
begin
i := 0;
j := 0;
Result := '';
for x := 1 to length(text) do
begin
i := (i + 1) mod length(sandbox);
j := (j + sandbox[i]) mod length(sandbox);
swap := sandbox[i];
sandbox[i] := sandbox[j];
sandbox[j] := swap;
swap := sandbox[(sandbox[i] + sandbox[j]) mod length(sandbox)];
Result := Result + char(swap xor byte(text[x]));
end;
end;
Das ist in meiner vereinfachten Schreibweise und muß noch Deine abgepaßt werden. Noch eine (eigentlich triviale) Frage: Vor dem Entschlüsseln wird doch wohl auch Initialize aufgerufen?
Gammatester