Пригодится думаю:
Код
type
TByteArray = array of Byte;
procedure RC4(Data, Key: Pointer; DataSize: DWORD; KeySize: BYTE); overload;
var
Temp: BYTE;
Result: PBYTE;
X, Y, Z: DWORD;
RB: array[BYTE] of DWORD;
begin
if Assigned(Data) and (Assigned(Key)) and (KeySize>0) then
try
for X:=0 to 255 do
RB[X]:=X;
X:=0;
Y:=0;
Z:=0;
for X:=0 to 255 do
begin
Y:=(Y+RB[X]+(TByteArray(Key)[X mod KeySize])) mod 256;
Temp:=RB[X];
RB[X]:=RB[Y];
RB[Y]:=Temp;
end;
X:=0;
Y:=0;
Z:=0;
Result:=Data;
for X:=0 to (DataSize-1) do
begin
Y:=(Y+1) mod 256;
Z:=(Z+RB[Y]) mod 256;
Temp:=RB[Y];
RB[Y]:=RB[Z];
RB[Z]:=Temp;
Result^:=Result^ xor (RB[(RB[Y]+RB[Z]) mod 256]);
Inc(Result);
end;
except
end;
end;
function RC4(Str: string; Key: string): string; overload;
begin
Result:=Str;
RC4(@Result[1], @Key[1], (Length(Result)), (Length(Key)));
end;