Delphi編寫的等長加密與解密

2021-09-04 15:45:20 字數 3566 閱讀 5026

最近在看一本關於網路遊戲服務端開發的書,雖然該書是個空架子,裡面沒有多少實際的內容(此書評價不好),但其中關於等長加密與解密的**還是有一定的借鑑作用的。他山之石,可以攻玉。因為書中是c++的**,所以我花了半個小時的時間將它轉換成了delphi的**。公布出來便於有這方面需要的朋友可以借鑑使用。

unit ucrypt;

inte***ce

uses

windows, sysutils;

const

c1        = 52845;

c2        = 22719;

cryptkey  = 72957;

function  encrypt(source: array of byte; var dest: array of byte; len: cardinal): bool; overload;

function  decrypt(source: array of byte; var dest: array of byte; len: cardinal): bool; overload;

function  encrypt(source: string; var dest: string): bool; overload;

function  decrypt(source: string; var dest: string): bool; overload;

function  encrypt(source: pchar; dest: pchar; len: cardinal): bool; overload;

function  decrypt(source: pchar; dest: pchar; len: cardinal): bool; overload;

implementation

function  encrypt(source: pchar; dest: pchar; len: cardinal): bool; overload;

vari: integer;

key: integer;

begin

key:=cryptkey;

//判斷資料是否正常

if (not assigned(source)) or (not assigned(dest)) or (len <=0) then

begin

result:=false;

exit;

end;

//迴圈加密每乙個位元組

for i:=0 to len - 1 do

begin

dest[i]:=char(byte(source[i]) xor (key shr 8));

key:=(byte(dest[i]) + key) * c1 + c2;

end;

result:=true;

end;

function  decrypt(source: pchar; dest: pchar; len: cardinal): bool; overload;

vari: integer;

key: integer;

prevblock: byte;

begin

key:=cryptkey;

//判斷資料是否正常

if (not assigned(source)) or (not assigned(dest)) or (len <=0) then

begin

result:=false;

exit;

end;

//迴圈加密每乙個位元組

for i:=0 to len - 1 do

begin

prevblock:=byte(source[i]);

dest[i]:=char(byte(source[i]) xor (key shr 8));

key:=(byte(prevblock) + key) * c1 + c2;

end;

result:=true;

end;

function  encrypt(source: string; var dest: string): bool;

begin

result:=false;

if length(source) > 0 then

begin

setlength(dest, length(source));

encrypt(pchar(source), pchar(dest), length(source));

result:=true;

end;

end;

function  decrypt(source: string; var dest: string): bool;

begin

result:=false;

if length(source) > 0 then

begin

setlength(dest, length(source));

decrypt(pchar(source), pchar(dest), length(source));

result:=true;

end;

end;

function  encrypt(source: array of byte; var dest: array of byte; len: cardinal): bool;

vari: integer;

key: integer;

begin

key:=cryptkey;

//判斷資料是否正常

if len <= 0 then

begin

result:=false;

exit;

end;

//迴圈加密每乙個位元組

for i:=0 to len - 1 do

begin

dest[i]:=source[i] xor (key shr 8);

key:=(dest[i] + key) * c1 + c2;

end;

result:=true;

end;

function  decrypt(source: array of byte; var dest: array of byte; len: cardinal): bool;

vari: integer;

prevblock: byte;

key: integer;

begin

key:=cryptkey;

//判斷資料是否正常

if (len <= 0) then

begin

result:=false;

exit;

end;

//迴圈解密每乙個位元組

for i:=0 to len - 1 do

begin

prevblock:=source[i];

dest[i]:=source[i] xor (key shr 8);

key:=(prevblock + key) * c1 + c2;

end;

result:=true;

end;

end.

Delphi編寫的等長加密與解密

最近在看一本關於網路遊戲服務端開發的書,雖然該書是個空架子,裡面沒有多少實際的內容 此書評價不好 但其中關於等長加密與解密的 還是有一定的借鑑作用的。他山之石,可以攻玉。因為書中是c 的 所以我花了半個小時的時間將它轉換成了delphi的 公布出來便於有這方面需要的朋友可以借鑑使用。unit ucr...

C 呼叫delphi編寫的dll

技術實現 如何逐步實現動態庫的載入,型別的匹配,動態鏈結庫函式匯出的定義,參考下面巨集定義即可 define libexport api extern c declspec dllexport 第一步,我先從簡單的呼叫出發,定義了乙個簡單的函式,該函式僅僅實現乙個整數加法求和 libexport a...

加密加簽與解密解籤區別

資料加密 用公鑰加密,只有用私鑰解開,因為私鑰只有你自己有,所以他保證了資料不能被別人看到 簽名 用私鑰加密,只能用公鑰解密,任何人都可以用公鑰驗證。因為私鑰只有你自己有,所以它可以保證資料只能是你發出的,不可能有別人發出,除非你得私鑰丟失或被第三方破解出來 數字簽名起不到加密作用,但可以確定是誰發...