📄 rsa.pas
字号:
unit RSA;
interface
const
ItemMaxLen = 64;
type
TInt64Item = record
Length: Integer; //0x00
Items: array[0..ItemMaxLen] of Int64;
end;
TChItem = array[0..ItemMaxLen] of Char;
procedure RSAEncode(Src: TChItem; len: Integer; var Des: TInt64Item; E: Int64; n: Int64);
procedure RSADecode(Src: TInt64Item; var Des: TChItem; D: Int64; n: Int64);
procedure XORCode(XORMode: Char; Src: PChar; var Des: TChItem; len: Integer);
implementation
function PowMod(base: Int64; pow: Int64; n: Int64): Int64;
var
A, b, c: Int64;
begin
A := base;
b := pow;
c := 1;
while (b > 0) do begin
while (not ((b and 1) > 0)) do begin
b := b shr 1;
A := A * A mod n;
end;
Dec(b);
c := A * c mod n;
end;
Result := c;
end;
procedure RSAEncode(Src: TChItem; len: Integer; var Des: TInt64Item; E: Int64; n: Int64);
var
I: Integer;
begin
Des.Length := len;
for I := 0 to len - 1 do begin
Des.Items[I] := PowMod(Int64(Src[I]), E, n);
end;
end;
procedure RSADecode(Src: TInt64Item; var Des: TChItem; D: Int64; n: Int64);
var
I, A: Integer;
begin
FillChar(Des, ItemMaxLen, 0);
for I := 0 to Src.Length - 1 do begin
A := PowMod(Src.Items[I], D, n);
Des[I] := Char(A);
end;
end;
procedure XORCode(XORMode: Char; Src: PChar; var Des: TChItem; len: Integer);
var
I: Integer;
begin
FillChar(Des, ItemMaxLen, 0);
for I := 0 to len - 1 do begin
Des[I] := Char(Integer(Src[I]) xor Integer(XORMode));
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -