📄 gamecode.pas
字号:
unit Gamecode;
interface
uses
SysUtils,Classes,Windows;
//加密使用字符从第一行第一个 N 开始解密使用字符从第1行第5个 U 开始 字符总长度256
const
GameKey : array [0..127] of byte =
($4E, $3E, $54, $53, $56, $55, $4A, $6C, $77, $64, $63, $42, $4D, $46, $6A, $6E,
$41, $4B, $62, $3F, $71, $78, $76, $79, $65, $47, $7A, $66, $4C, $50, $3D, $5F,
$45, $52, $40, $5A, $5C, $61, $6D, $5D, $43, $68, $67, $6F, $57, $44, $3B, $51,
$75, $58, $5B, $3C, $74, $6B, $70, $72, $5E, $60, $69, $49, $48, $4F, $59, $73,
$2E, $33, $1E, $01, $13, $22, $10, $0B, $28, $2D, $20, $0D, $19, $3C, $3B, $06,
$11, $1C, $0C, $00, $3D, $1D, $2F, $21, $03, $02, $05, $04, $2C, $31, $3E, $23,
$32, $24, $27, $38, $1F, $39, $25, $12, $0A, $09, $18, $1B, $2A, $29, $3A, $0E,
$35, $07, $26, $0F, $2B, $36, $14, $37, $3F, $34, $30, $16, $08, $15, $17, $1A);
function decode(Source: Pchar; len: integer; Dest: Pchar):integer; //解密
function encode(Source: Pchar; len: integer; Dest: Pchar):integer; //加密
function CharToAscii(Source: PChar; Len: Integer):string;
function AsciiToChar(PDestChar, PSource: PChar; size: integer): integer;
implementation
function decode(Source: Pchar; len: integer ; Dest: Pchar):integer; //解密
var
a1, d1: byte;
i, count, di, si :integer;
begin
result := len div 4 * 3 ; //返回解密后数据长度
i := 0;
while i < len do
begin
d1 := byte(Source[i]);
if (d1 = $3B) or (d1 = $7A) then
begin
end;
d1 := d1 and $0FF;
d1 := GameKey[d1 + 05];
byte(Source[i]) := d1;
inc(i);
end;
di := 0;
si := 0;
count := len div 4; //循环次数
for i := 1 to count do
begin
a1 := ord(Source[di]); //解密数据 (取4个.转化3个)
a1 := a1 shl 2;
d1 := ord(Source[di + 1]);
d1 := d1 shr 4;
a1 := a1 or d1;
Dest[si] := chr(a1);
a1 := ord(Source[di + 1]);
a1 := a1 shl 4;
d1 := ord(Source[di + 2]);
d1 := d1 shr 2;
a1 := a1 or d1;
Dest[si + 1] := chr(a1);
a1 := ord(Source[di + 2]);
a1 := a1 shl 6;
d1 := ord(Source[di + 3]);
a1 := a1 or d1;
Dest[si + 2] := chr(a1);
di := di + 4;
si := si + 3;
end;
end;
function encode(Source: Pchar; len: integer; Dest: Pchar):integer; //加密
var
a1, d1 : byte;
i, count, di, si : integer;
begin
result := len div 3 * 4 ; //返回加密后数据长度
di := 0;
si := 0;
count := len div 3; //定义循环次数
for i := 1 to count do
begin
a1 := ord (Source[di]); //第一次转换 取3个 输出4个
a1 := a1 shr 2;
Dest[si] := chr(a1);
a1 := ord(Source[di]);
a1 := a1 and 3;
a1 := a1 shl 4;
d1 := ord (Source[di +1]);
d1 := d1 shr 4;
a1 := a1 or d1;
Dest[si +1] := chr(a1);
a1 := ord(Source[di + 1]);
a1 := a1 and $0F;
a1 := a1 shl 2;
d1 := ord(Source[di + 2]);
d1 := d1 shr 6;
a1 := a1 or d1;
Dest[si + 2] := chr(a1);
a1 := ord ( Source[di + 2]) ;
a1 := a1 and $3F;
Dest[si + 3] := chr (a1) ;
//第二次转换
d1 := ord(Dest[si]); //第 1 个
d1 := GameKey[d1];
Dest[si] := chr(d1);
d1 := ord(Dest[si + 1]); //第 2 个
d1 := GameKey[d1];
Dest[si + 1] := chr(d1);
d1 := ord(Dest[si + 2]); //第 3 个
d1 := GameKey[d1];
Dest[si + 2] := chr(d1);
d1 := ord(Dest[si + 3]); //第 4 个
d1 := GameKey[d1];
Dest[si + 3] := chr(d1);
di := di + 3;
si := si + 4;
end;
end;
function CharToAscii(Source: PChar; len: Integer):string;
var
Source2 : string;
i : Integer;
p : Integer;
ascii : string;
begin
SetLength(ascii, 2*len);
ascii:='';
for i:=0 to len-1 do
begin
p := integer(Source[i]);
Source2 := IntToHex(p, 2);
ascii := ascii + Source2;
end;
result := ascii;
end;
function StrToHex(C: PChar): byte;
var
m1, m2 : byte;
begin
case c[0] of
'0','1','2','3','4','5','6','7','8','9' : m1 := StrToInt(c[0]);
'A','a' : m1 := 10;
'B','b' : m1 := 11;
'C','c' : m1 := 12;
'D','d' : m1 := 13;
'E','e' : m1 := 14;
'F','f' : m1 := 15;
end;
case c[1] of
'0','1','2','3','4','5','6','7','8','9' : m2 := StrToInt(c[1]);
'A','a' : m2 := 10;
'B','b' : m2 := 11;
'C','c' : m2 := 12;
'D','d' : m2 := 13;
'E','e' : m2 := 14;
'F','f' : m2 := 15;
end;
result := m1 * 16 + m2;
end;
function AsciiToChar(PDestChar, PSource: PChar; size: integer): integer;
var
i : integer;
str : array [0..1] of Char;
temp : byte;
begin
if size mod 2 = 1 then
begin
MessageBox(0, '待转化字符的长度出错', '错误', MB_OK);
result := 0;
exit;
end;
size := size div 2;
for i := 0 to size do
begin
CopyMemory(@str, @PSource[i * 2], 2);
temp := StrToHex(@str);
PDestChar[i] := Char(temp);
end;
result := size;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -