Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

Re: RC4 Problem bei Wikipedia-Pseudoquellcode

  Alt 18. Feb 2009, 08:36
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
  Mit Zitat antworten Zitat