最近在看一本關於網路遊戲服務端開發的書,雖然該書是個空架子,裡面沒有多少實際的內容(此書評價不好),但其中關於等長加密與解密的**還是有一定的借鑑作用的。他山之石,可以攻玉。因為書中是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...
加密加簽與解密解籤區別
資料加密 用公鑰加密,只有用私鑰解開,因為私鑰只有你自己有,所以他保證了資料不能被別人看到 簽名 用私鑰加密,只能用公鑰解密,任何人都可以用公鑰驗證。因為私鑰只有你自己有,所以它可以保證資料只能是你發出的,不可能有別人發出,除非你得私鑰丟失或被第三方破解出來 數字簽名起不到加密作用,但可以確定是誰發...