📄 xls_rc4.pas
字号:
unit XLS_RC4;
interface
uses Classes, SysUtils;
type TRC4Key = record
State: array[0..255] of byte;
x,y: byte;
end;
procedure RC4PrepareKey(KeyData: PByteArray; DataLen: integer; var Key: TRC4Key);
procedure RC4(Buffer: PByteArray; BuffLen: integer; var Key: TRC4Key);
implementation
procedure SwapByte(var A,B: byte);
var
T: byte;
begin
T := A;
A := B;
B := T;
end;
procedure RC4PrepareKey(KeyData: PByteArray; DataLen: integer; var Key: TRC4Key);
var
Index1: byte;
Index2: byte;
State: PByteArray;
Counter: longword;
begin
State := @Key.state;
for Counter := 0 to 255 do
State[Counter] := Counter;
Key.X := 0;
Key.Y := 0;
Index1 := 0;
Index2 := 0;
for Counter := 0 to 255 do begin
Index2 := (KeyData[Index1] + State[counter] + Index2) mod 256;
SwapByte(State[Counter],State[Index2]);
Index1 := (Index1 + 1) mod DataLen;
end;
end;
procedure RC4(Buffer: PByteArray; BuffLen: integer; var Key: TRC4Key);
var
X: byte;
Y: byte;
State: PByteArray;
XorIndex: byte;
Counter: longword;
begin
X := Key.X;
Y := Key.Y;
State := @Key.state;
for Counter := 0 to BuffLen - 1 do begin
X := (X + 1) mod 256;
Y := (State[X] + Y) mod 256;
SwapByte(State[X],State[Y]);
XorIndex := (State[X] + State[Y]) mod 256;
Buffer[Counter] := Buffer[Counter] xor State[XorIndex];
end;
Key.X := X;
Key.Y := Y;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -