Ich kann erstmal keine Fehler erkennen. Poste dein Passwort und deinen nicht korrekt zu entschlüsselenden String, vorher brauch ich garnicht anfangen zu testen, nochmal:
Passwort und Testvektoren
Allerdings würde ich deinen Code anders "schreiben", du benötigst keine separate Funktion zur Verschlüsselung und Entschlüsselung mit RC4.
Delphi-Quellcode:
function RC4Encode(const Value, Password: String): String; overload;
begin
Result := RC4Code(Value, Password);
end;
function RC4Decode(const Value, Password: String): String; overload;
begin
Result := RC4Code(Value, Password);
end;
wie du siehst
function RC4Code(const Value, Password: String): String; overload;
macht schon alles was du benötigst und deine separaten Encode()/Decode() Funktionen sind überflüssig. Ich würde sogesehen garnichts neu "schreiben" sondern einfach nur die Funktionen direkte benutzen wie sie sind.
Zudem, schaue dir mal RC4Code(const Value, Password: String) ganz genau an. Du erkennst das die Parameter als const deklariert wurden, du erkennst das nach einer lokalen var Deklaration ein Zeileumbruch und 2 Zeichen Einrückungen existieren, du erkennst das eine "allozierte" Resource wie var RC4: TRC4Context durch ein try finally Block auch geschützt wieder freigegeben wird, du erkennst das diese Funktion auf modulare Subfunktionen zurückgreift -> sprich modular programmiert wurde, Du erkennst eine ordentliche Namensgebung samt Groß-Kleinschreibung in den Parametern und Variablen. Alles in allem erkennst du einen sauberen Pascal Programmierstil.
Das soll jetzt nicht als Kritik oder Besserwisserisch rüberkommen, sondern als Hinweise darauf woran du bei deinem Programmierstil noch arbeiten könntest.
Besonders weil in deinem Posting ganz oben als Kommentar MEIN Name auftaucht und ein anderer Leser dieses Postings meinen könnte ICH hätte die Funktionen encode() und decode() programmiert. Ehrlich gesagt würde mich das beleidigen
Gruß Hagen