| 導購 | 订阅 | 在线投稿
分享
 
 
 

IDEA數據加密算法實現

來源:互聯網  2007-09-15 05:02:39  評論

IDEA數據加密算法介紹之續篇,代碼實現:
http://blog.csdn.net/CXXSoft/archive/2006/08/23/1109279.aspx

5、 源碼:

王朝网络
//*******************************************************************************

王朝网络
* IDEA數據加密算法1.0版本

王朝网络
* 開發作者: 成曉旭

王朝网络
* 項目簡述: IDEA數據加密算法1.0版本

王朝网络
* 啓動時間: 2000年05月08日

王朝网络
* 完成時間: 2000年01月14日 20:09:00 <1個晚上>

王朝网络
*

王朝网络
* 開發環境: Windows98

王朝网络
* 開發工具: Borland Delphi5

王朝网络
*

王朝网络
* 文件名稱: IDEA.pas

王朝网络
* 簡 介: IDEA數據加密算法1.0版本

王朝网络
*

王朝网络
* 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!

王朝网络
*

王朝网络
******************************************************************************/

王朝网络
unit IDEA;

王朝网络

王朝网络
interface

王朝网络

王朝网络
uses

王朝网络
Windows, Messages, SysUtils, Classes,Dialogs;

王朝网络
function BinToHex(strBin:string):string;

王朝网络
function HexToTen(strHex:string):int64;

王朝网络
function LeftMove(S:string;P:integer):String;

王朝网络
function ModAdd(intAdd1,intAdd2:int64):int64;

王朝网络
function ModMul(intMul1,intMul2:int64;intFlag:integer):int64;

王朝网络
function ModXor(intXor1,intXor2:int64):int64;

王朝网络
procedure CreatePassword(strPassword:string;VAR arrPassword:array of int64;VAR arrOpenPassword:array of int64); //産生加密子密鑰函數

王朝网络
procedure GetOpenPassword(intSource:int64;VAR intResult:int64;Flag:integer); //求取解密子密鑰函數

王朝网络
procedure CreateKeyTable(); //産生加、解密子密鑰之間的對應關系表

王朝网络
procedure Riddle(arrPassword:array of int64;arrRiddleKey:array of int64;VAR arrOpenPassword:array of int64);StdCall;export; //IDEA數據解密函數

王朝网络
procedure CreateOpenPassword(VAR arrOpenPassKey:array of int64); //産生解密子密鑰函數

王朝网络
procedure CreateKey(VAR arrKey:array of int64;VAR arrOpenKey:array of int64;VAR strOutKey:string);StdCall;export; //産生加密密鑰函數

王朝网络

王朝网络

王朝网络
implementation

王朝网络

王朝网络
Const strNum:array[1..16] of string[4]=('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111');

王朝网络
Const chrHex:array[1..16] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

王朝网络
var

王朝网络
g_arr_Ten_Password:array[1..52] of int64;

王朝网络
g_arr_Flag:array[1..52] of integer;

王朝网络
g_arr_Table:array[1..52] of integer;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
procedure CreateKey(VAR arrKey:array of int64;VAR arrOpenKey:array of int64;VAR strOutKey:string);StdCall;export;

王朝网络
var

王朝网络
intKey,intLoop1,intLoop2,intLoop3:integer;

王朝网络
hexKey,ch,strTemp:string;

王朝网络
strKey:string[128];

王朝网络
begin

王朝网络
strKey:='';

王朝网络
Randomize;

王朝网络
for intLoop1:=1 to 8 do

王朝网络
begin

王朝网络
intKey:=Random(65536);

王朝网络
hexKey:=IntToHex(intKey,4);

王朝网络
strTemp:='';

王朝网络
for intLoop2:=1 to 4 do

王朝网络
begin

王朝网络
ch:=Copy(hexKey,intLoop2,1);

王朝网络
for intLoop3:=1 to 16 do

王朝网络
begin

王朝网络
if ch = chrHex[intLoop3] then

王朝网络
begin

王朝网络
ch:= strNum[intLoop3];

王朝网络

break;

王朝网络
end;

王朝网络
end;

王朝网络
strTemp:=strTemp+ch;

王朝网络
end;

王朝网络
strKey:=strKey+strTemp;

王朝网络
end;

王朝网络
strOutKey:=strKey;

王朝网络
CreatePassword(strKey,arrKey,arrOpenKey); //調用産生加密子密鑰過程

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
function BinToHex(strBin:string):string;

王朝网络
var

王朝网络
intLoop1,intLoop2:integer;

王朝网络
strTemp,strResult:string;

王朝网络
begin

王朝网络
intLoop1:=1;

王朝网络
strResult:='';

王朝网络
if Length(strBin) <> 16 then ShowMessage('二進制數據長度有錯!');

王朝网络
while (intLoop1<=16) do

王朝网络
begin

王朝网络
strTemp:=Copy(strBin,intLoop1,4);

王朝网络
for intLoop2:=1 to 16 do

王朝网络
if strTemp=strNum[intLoop2] then

王朝网络
begin

王朝网络
strTemp:=chrHex[intLoop2];

王朝网络

break;

王朝网络
end;

王朝网络
strResult:=strResult+strTemp;

王朝网络
intLoop1:=intLoop1 + 4;

王朝网络
end;

王朝网络
BinToHex:=strResult;

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
function HexToTen(strHex:string):int64; //十六進制轉十進制

王朝网络
var

王朝网络
intLoop1,intLoop2,intTemp:integer;

王朝网络
intResult:int64;

王朝网络
strTemp:string;

王朝网络
begin

王朝网络
intResult:=0;

王朝网络
intTemp:=0;

王朝网络
if Length(strHex) <> 4 then ShowMessage('十六進制數據長度有錯!');

王朝网络
for intLoop1:=1 to 4 do

王朝网络
begin

王朝网络
Case intLoop1 of

王朝网络
1:intTemp:=4096;

王朝网络
2:intTemp:=256;

王朝网络
3:intTemp:=16;

王朝网络
4:intTemp:=1

王朝网络
end;

王朝网络
strTemp:=Copy(strHex,intLoop1,1);

王朝网络
for intLoop2:=1 to 16 do

王朝网络
if UpperCase(strTemp) = chrHex[intLoop2] then

王朝网络
begin

王朝网络
intResult:=intResult+(Int64(intLoop2) - 1)*Int64(intTemp);

王朝网络

break;

王朝网络
end;

王朝网络
end;

王朝网络
HexToTen:=intResult;

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
function LeftMove(S:string;P:integer):String;

王朝网络
var

王朝网络
int_Len,i:integer;

王朝网络
str_Result,str_Num:string;

王朝网络
begin

王朝网络
int_Len:=length(s);

王朝网络
str_Num:=S;

王朝网络
str_Result:='';

王朝网络
if int_Len <= P then

王朝网络
str_Result :=S

王朝网络
else

王朝网络
begin

王朝网络
for i:=P+1 to int_Len do

王朝网络
str_Result:=str_Result+copy(str_Num,i,1);

王朝网络
str_Result:=str_Result+copy(str_Num,1,p);

王朝网络
end;

王朝网络
LeftMove:=Trim(str_Result);

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
function ModAdd(intAdd1,intAdd2:int64):int64;

王朝网络
begin

王朝网络
ModAdd:=(intAdd1 + intAdd2) mod 65536; //模65536求和

王朝网络
end;

王朝网络

王朝网络
function ModMul(intMul1,intMul2:int64;intFlag:integer):int64;

王朝网络
var intTemp:int64;

王朝网络
begin

王朝网络
intTemp:=(intMul1 * intMul2) mod 65537;

王朝网络
if intFlag = 0 then

王朝网络
begin

王朝网络
if intMul1 = 0 then intTemp:=65537 - intMul2;

王朝网络
if intMul2 = 0 then intTemp:=65537 - intMul1;

王朝网络
if intTemp = 65536 then intTemp:=0;

王朝网络
if intTemp = 65537 then intTemp:=1;

王朝网络
end

王朝网络
else

王朝网络
begin

王朝网络
if intMul1 = 0 then intTemp:=65537 - intMul2;

王朝网络
if intMul2 = 0 then intTemp:=65537 - intMul1;

王朝网络
if intTemp = 0 then intTemp:=65536;

王朝网络
if intTemp = 65537 then intTemp:=1;

王朝网络
if intTemp = 65536 then intTemp:=0;

王朝网络
end;

王朝网络
ModMul:=intTemp;

王朝网络
end;

王朝网络

王朝网络
function ModXor(intXor1,intXor2:int64):int64;

王朝网络
begin

王朝网络
ModXor:= intXor1 xor intXor2;

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
procedure CreatePassword(strPassword:string;VAR arrPassword:array of int64;VAR arrOpenPassword:array of int64);

王朝网络
var

王朝网络
strKey:string;

王朝网络
strTemp:array[1..52] of string[4];

王朝网络
intStart,intCount:integer;

王朝网络
begin

王朝网络
strKey:=strPassword; //

王朝网络
intCount:=1;

王朝网络
intStart:=1;

王朝网络
王朝网络
...{--------------------産生52個16bit的加密子密鑰部分-------------------}

王朝网络
while (intCount<=52) do

王朝网络
begin

王朝网络
strTemp[intCount]:=BinToHex(Copy(strKey,intStart,16));

王朝网络
intStart:=intStart+16;

王朝网络
intCount:=intCount+1;

王朝网络
if ((intCount mod 8) = 1) then

王朝网络
begin

王朝网络
strKey:=LeftMove(strKey,25);

王朝网络
intStart:=1;

王朝网络
end;

王朝网络
end;

王朝网络
intCount:=1;

王朝网络
while (intCount<=52) do

王朝网络
begin

王朝网络
arrPassword[intCount-1]:=HexToTen(strTemp[intCount]);

王朝网络
g_arr_Ten_Password[intCount]:=arrPassword[intCount-1];

王朝网络
intCount:=intCount+1;

王朝网络
end;

王朝网络
CreateOpenPassword(arrOpenPassword);

王朝网络
王朝网络
...{--------------------産生52個16bit的加密子密鑰部分-------------------}

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
procedure GetOpenPassword(intSource:int64;VAR intResult:int64;Flag:integer);

王朝网络
var

王朝网络
int_Source,int_Result,int_Mod_Value:int64;

王朝网络
int_Loop:integer;

王朝网络
begin

王朝网络
int_Source:=intSource;

王朝网络
王朝网络
...{--------------------求取每個加密子密鑰相應的解密子密鑰部分-------------------}

王朝网络
Case Flag of

王朝网络
0: intResult:=int_Source;

王朝网络
1: intResult:=65536-int_Source;

王朝网络
2:

王朝网络
begin

王朝网络
if int_Source=0 then

王朝网络
intResult:=int_Source

王朝网络
else

王朝网络
for int_Loop:=1 to 65536 do

王朝网络
begin

王朝网络
int_Result:=Int64(int_Loop)*65537+1;

王朝网络
int_Mod_Value:=int_Result mod int_Source;

王朝网络
if int_Mod_Value = 0 then

王朝网络
begin

王朝网络
int_Result:=int_Result div int_Source;

王朝网络
intResult:=int_Result;

王朝网络

break;

王朝网络
end;

王朝网络
end;

王朝网络
end;

王朝网络
end;

王朝网络
王朝网络
...{--------------------求取每個加密子密鑰相應的解密子密鑰部分-------------------}

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
procedure CreateKeyTable();

王朝网络
var

王朝网络
int_Count_CreatePassword,int_Count_OpenPassword,int_ExChange:integer;

王朝网络
begin

王朝网络
王朝网络
...{----------------求取在産生解密子密鑰時所用的參數標志對應表部分-------------}

王朝网络
for int_Count_CreatePassword:=52 downto 1 do

王朝网络
Case int_Count_CreatePassword mod 6 of

王朝网络
0,5:begin g_arr_Flag[int_Count_CreatePassword]:=0; end;

王朝网络
2,3:begin g_arr_Flag[int_Count_CreatePassword]:=1; end;

王朝网络
1,4:begin g_arr_Flag[int_Count_CreatePassword]:=2; end;

王朝网络
end;

王朝网络
王朝网络
...{----------------求取在産生解密子密鑰時所用的參數標志對應表部分-------------}

王朝网络

王朝网络
王朝网络
...{----------------求取每個加密子密鑰與相應解密子密鑰間的對應關系映射表部分-------------}

王朝网络
int_Count_CreatePassword:=52;

王朝网络
int_Count_OpenPassword:=1;

王朝网络
while (int_Count_CreatePassword>=1) do

王朝网络
begin

王朝网络
Case int_Count_CreatePassword mod 6 of

王朝网络
1,2,3,4:

王朝网络
begin

王朝网络
g_arr_Table[int_Count_OpenPassword]:=int_Count_CreatePassword-3;

王朝网络
g_arr_Table[int_Count_OpenPassword+1]:=int_Count_CreatePassword-1;

王朝网络
g_arr_Table[int_Count_OpenPassword+2]:=int_Count_CreatePassword-2;

王朝网络
g_arr_Table[int_Count_OpenPassword+3]:=int_Count_CreatePassword;

王朝网络
if (int_Count_CreatePassword >=48) or (int_Count_CreatePassword <=4 ) then //首輪和末輪處理不需交換,故要再換回來

王朝网络
begin

王朝网络
int_ExChange:=g_arr_Table[int_Count_OpenPassword+1];

王朝网络
g_arr_Table[int_Count_OpenPassword+1]:=g_arr_Table[int_Count_OpenPassword+2];

王朝网络
g_arr_Table[int_Count_OpenPassword+2]:=int_ExChange;

王朝网络
end;

王朝网络
int_Count_CreatePassword:=int_Count_CreatePassword-4;

王朝网络
int_Count_OpenPassword:=int_Count_OpenPassword+4;

王朝网络
end;

王朝网络
0,5:

王朝网络
begin

王朝网络
g_arr_Table[int_Count_OpenPassword]:=int_Count_CreatePassword-1;

王朝网络
g_arr_Table[int_Count_OpenPassword+1]:=int_Count_CreatePassword;

王朝网络
int_Count_CreatePassword:=int_Count_CreatePassword-2;

王朝网络
int_Count_OpenPassword:=int_Count_OpenPassword+2;

王朝网络
end;

王朝网络
end;

王朝网络
end;

王朝网络
王朝网络
...{----------------求取每個加密子密鑰與相應解密子密鑰間的對應關系映射表部分-------------}

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络

王朝网络
procedure CreateOpenPassword(VAR arrOpenPassKey:array of int64);

王朝网络
var

王朝网络
int_Loop:integer;

王朝网络
arrTemp:array[1..52] of int64;

王朝网络
begin

王朝网络
王朝网络
...{-------------通過調用産生加、解密子密鑰對應關系函數産生對應關系表部分------------------}

王朝网络
CreateKeyTable;

王朝网络
王朝网络
...{-------------通過調用求解解密子密鑰函數産生解密子密鑰部分------------------}

王朝网络
for int_Loop:=1 to 52 do

王朝网络
begin

王朝网络
GetOpenPassword(g_arr_Ten_Password[int_Loop],arrTemp[g_arr_Table[int_Loop]],g_arr_Flag[int_Loop]);

王朝网络
end;

王朝网络
for int_Loop:=1 to 52 do

王朝网络
arrOpenPassKey[int_Loop-1]:=arrTemp[int_Loop];

王朝网络
王朝网络
...{-------------通過調用求解解密子密鑰函數産生解密子密鑰部分------------------}

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络

王朝网络
procedure Riddle(arrPassword:array of int64;arrRiddleKey:array of int64;VAR arrOpenPassword:array of int64);

王朝网络
var

王朝网络
Count,i:integer;

王朝网络
V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,C1,C2,C3,C4,ExChange:int64;

王朝网络
P:array[1..4] of int64;

王朝网络
begin

王朝网络
王朝网络
...{------------------------數據 "解密" 算法實現部分------------------}

王朝网络
for i:=Low(arrPassword) to High(arrPassword) do

王朝网络
P[i+1]:=arrPassword[i];

王朝网络
Count:=0;

王朝网络
while (Count<48) do

王朝网络
begin

王朝网络
V1:= ModMul(P[1],arrRiddleKey[Count],1); //相乘 1

王朝网络
Inc(Count);

王朝网络
V2:= ModAdd(P[2],arrRiddleKey[Count]); //相加 2

王朝网络
Inc(Count);

王朝网络
V3:= ModAdd(P[3],arrRiddleKey[Count]); //相加 3

王朝网络
Inc(Count);

王朝网络
V4:= ModMul(P[4],arrRiddleKey[Count],1); //相乘 4

王朝网络
Inc(Count);

王朝网络
V5:= ModXor(V1,V3); //異或 5

王朝网络
V6:= ModXor(V2,V4); //異或 6

王朝网络
V7:= ModMul(V5,arrRiddleKey[Count],1); //相乘 7

王朝网络
Inc(Count);

王朝网络
V8:= ModAdd(V6,V7); //相加 8

王朝网络
V9:= ModMul(V8,arrRiddleKey[Count],1); //相乘 9

王朝网络
Inc(Count);

王朝网络
V10:=ModAdd(V7,V9); //相加 10

王朝网络
V11:=ModXor(V1,V9); //異或 11

王朝网络
V12:=ModXor(V2,V10); //異或 12

王朝网络
V13:=ModXor(V3,V9); //異或 13

王朝网络
V14:=ModXor(V4,V10); //異或 14

王朝网络
P[1]:=V11;

王朝网络
P[2]:=V13; //注意:交換中間兩個輸出結果

王朝网络
P[3]:=V12; //注意:交換中間兩個輸出結果

王朝网络
P[4]:=V14;

王朝网络
end; //結束8輪計算

王朝网络
ExChange:=P[2];

王朝网络
P[2]:=P[3];

王朝网络
P[3]:=ExChange; //因爲最後一輪無需轉換,所以必須把P[2],P[3]再次轉換回來

王朝网络
C1:= ModMul(P[1],arrRiddleKey[48],1); //相乘 1

王朝网络
C2:= ModAdd(P[2],arrRiddleKey[49]); //相加 2

王朝网络
C3:= ModAdd(P[3],arrRiddleKey[50]); //相加 3

王朝网络
C4:= ModMul(P[4],arrRiddleKey[51],1); //相乘 4

王朝网络
王朝网络
...{------------------------數據 "解密" 算法實現部分------------------}

王朝网络
arrOpenPassword[Low(arrOpenPassword)]:=C1;

王朝网络
arrOpenPassword[Low(arrOpenPassword)+1]:=C2;

王朝网络
arrOpenPassword[Low(arrOpenPassword)+2]:=C3;

王朝网络
arrOpenPassword[Low(arrOpenPassword)+3]:=C4;

王朝网络
//數據解密成功!

王朝网络
end;

王朝网络
王朝网络
...{--------------------------------------------------------------------}

王朝网络

王朝网络
end.

王朝网络

IDEA數據加密算法介紹之續篇,代碼實現: [url=http://blog.csdn.net/CXXSoft/archive/2006/08/23/1109279.aspx]http://blog.csdn.net/CXXSoft/archive/2006/08/23/1109279.aspx[/url] 5、 源碼: [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746442.png[/img]//******************************************************************************* [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746474.png[/img] * IDEA數據加密算法1.0版本 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746505.png[/img] * 開發作者: 成曉旭 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746536.png[/img] * 項目簡述: IDEA數據加密算法1.0版本 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746567.png[/img] * 啓動時間: 2000年05月08日 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746583.png[/img] * 完成時間: 2000年01月14日 20:09:00 <1個晚上> [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746614.png[/img] * [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746646.png[/img] * 開發環境: Windows98 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746677.png[/img] * 開發工具: Borland Delphi5 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746692.png[/img] * [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746724.png[/img] * 文件名稱: IDEA.pas [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746755.png[/img] * 簡 介: IDEA數據加密算法1.0版本 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746786.png[/img] * [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746817.png[/img] * 備注: 任何人使用此文件時,請保留此段自述文件,謝謝! [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746849.png[/img] * [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746864.png[/img] ******************************************************************************/ [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746896.png[/img]unit IDEA; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746927.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746958.png[/img]interface [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803746989.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747021.png[/img]uses [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747052.png[/img] Windows, Messages, SysUtils, Classes,Dialogs; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747067.png[/img] function BinToHex(strBin:string):string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747099.png[/img] function HexToTen(strHex:string):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747130.png[/img] function LeftMove(S:string;P:integer):String; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747161.png[/img] function ModAdd(intAdd1,intAdd2:int64):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747192.png[/img] function ModMul(intMul1,intMul2:int64;intFlag:integer):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747208.png[/img] function ModXor(intXor1,intXor2:int64):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747239.png[/img] procedure CreatePassword(strPassword:string;VAR arrPassword:array of int64;VAR arrOpenPassword:array of int64); //産生加密子密鑰函數 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747271.png[/img] procedure GetOpenPassword(intSource:int64;VAR intResult:int64;Flag:integer); //求取解密子密鑰函數 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747302.png[/img] procedure CreateKeyTable(); //産生加、解密子密鑰之間的對應關系表 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747333.png[/img] procedure Riddle(arrPassword:array of int64;arrRiddleKey:array of int64;VAR arrOpenPassword:array of int64);StdCall;export; //IDEA數據解密函數 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747364.png[/img] procedure CreateOpenPassword(VAR arrOpenPassKey:array of int64); //産生解密子密鑰函數 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747380.png[/img] procedure CreateKey(VAR arrKey:array of int64;VAR arrOpenKey:array of int64;VAR strOutKey:string);StdCall;export; //産生加密密鑰函數 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747411.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747442.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747474.png[/img]implementation [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747505.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747521.png[/img]Const strNum:array[1..16] of string[4]=('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111'); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747552.png[/img]Const chrHex:array[1..16] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747583.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747614.png[/img] g_arr_Ten_Password:array[1..52] of int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747646.png[/img] g_arr_Flag:array[1..52] of integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747661.png[/img] g_arr_Table:array[1..52] of integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747692.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747724.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747755.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747786.png[/img]procedure CreateKey(VAR arrKey:array of int64;VAR arrOpenKey:array of int64;VAR strOutKey:string);StdCall;export; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747802.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747833.png[/img]intKey,intLoop1,intLoop2,intLoop3:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747864.png[/img]hexKey,ch,strTemp:string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747896.png[/img]strKey:string[128]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747911.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747942.png[/img]strKey:=''; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803747974.png[/img]Randomize; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748005.png[/img]for intLoop1:=1 to 8 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748036.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748052.png[/img] intKey:=Random(65536); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748114.png[/img] hexKey:=IntToHex(intKey,4); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748146.png[/img] strTemp:=''; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748177.png[/img] for intLoop2:=1 to 4 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748208.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748224.png[/img] ch:=Copy(hexKey,intLoop2,1); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748255.png[/img] for intLoop3:=1 to 16 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748286.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748317.png[/img] if ch = chrHex[intLoop3] then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748333.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748364.png[/img] ch:= strNum[intLoop3]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748396.png[/img] break; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748427.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748458.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748489.png[/img] strTemp:=strTemp+ch; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748521.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748536.png[/img] strKey:=strKey+strTemp; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748599.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748646.png[/img]strOutKey:=strKey; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748661.png[/img]CreatePassword(strKey,arrKey,arrOpenKey); //調用産生加密子密鑰過程 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748692.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748724.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748755.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748771.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748802.png[/img]function BinToHex(strBin:string):string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748833.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748864.png[/img]intLoop1,intLoop2:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748880.png[/img]strTemp,strResult:string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748911.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748942.png[/img]intLoop1:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803748974.png[/img]strResult:=''; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749005.png[/img]if Length(strBin) <> 16 then ShowMessage('二進制數據長度有錯!'); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749036.png[/img]while (intLoop1<=16) do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749067.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749083.png[/img] strTemp:=Copy(strBin,intLoop1,4); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749114.png[/img] for intLoop2:=1 to 16 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749146.png[/img] if strTemp=strNum[intLoop2] then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749177.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749192.png[/img] strTemp:=chrHex[intLoop2]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749224.png[/img] break; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749255.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749302.png[/img] strResult:=strResult+strTemp; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749333.png[/img] intLoop1:=intLoop1 + 4; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749364.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749380.png[/img]BinToHex:=strResult; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749411.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749442.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749489.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749505.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749536.png[/img]function HexToTen(strHex:string):int64; //十六進制轉十進制 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749567.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749614.png[/img]intLoop1,intLoop2,intTemp:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749646.png[/img]intResult:int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749677.png[/img]strTemp:string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749692.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749724.png[/img]intResult:=0; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749755.png[/img]intTemp:=0; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749802.png[/img]if Length(strHex) <> 4 then ShowMessage('十六進制數據長度有錯!'); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749833.png[/img]for intLoop1:=1 to 4 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749864.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749880.png[/img] Case intLoop1 of [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749911.png[/img] 1:intTemp:=4096; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749942.png[/img] 2:intTemp:=256; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803749974.png[/img] 3:intTemp:=16; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750005.png[/img] 4:intTemp:=1 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750036.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750130.png[/img] strTemp:=Copy(strHex,intLoop1,1); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750161.png[/img] for intLoop2:=1 to 16 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750192.png[/img] if UpperCase(strTemp) = chrHex[intLoop2] then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750224.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750255.png[/img] intResult:=intResult+(Int64(intLoop2) - 1)*Int64(intTemp); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750286.png[/img] break; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750317.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750349.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750364.png[/img]HexToTen:=intResult; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750427.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750442.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750474.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750521.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750567.png[/img]function LeftMove(S:string;P:integer):String; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750583.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750614.png[/img]int_Len,i:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750677.png[/img]str_Result,str_Num:string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750692.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750724.png[/img]int_Len:=length(s); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750755.png[/img]str_Num:=S; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750786.png[/img]str_Result:=''; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750817.png[/img]if int_Len <= P then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750833.png[/img] str_Result :=S [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750864.png[/img]else [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750896.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750927.png[/img] for i:=P+1 to int_Len do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803750974.png[/img] str_Result:=str_Result+copy(str_Num,i,1); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751005.png[/img] str_Result:=str_Result+copy(str_Num,1,p); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751036.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751067.png[/img]LeftMove:=Trim(str_Result); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751099.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751130.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751161.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751192.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751208.png[/img]function ModAdd(intAdd1,intAdd2:int64):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751239.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751271.png[/img]ModAdd:=(intAdd1 + intAdd2) mod 65536; //模65536求和 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751302.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751364.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751396.png[/img]function ModMul(intMul1,intMul2:int64;intFlag:integer):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751427.png[/img]var intTemp:int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751442.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751474.png[/img]intTemp:=(intMul1 * intMul2) mod 65537; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751505.png[/img]if intFlag = 0 then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751536.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751567.png[/img] if intMul1 = 0 then intTemp:=65537 - intMul2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751583.png[/img] if intMul2 = 0 then intTemp:=65537 - intMul1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751614.png[/img] if intTemp = 65536 then intTemp:=0; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751646.png[/img] if intTemp = 65537 then intTemp:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751677.png[/img] end [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751692.png[/img]else [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751724.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751755.png[/img] if intMul1 = 0 then intTemp:=65537 - intMul2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751786.png[/img] if intMul2 = 0 then intTemp:=65537 - intMul1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751817.png[/img] if intTemp = 0 then intTemp:=65536; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751833.png[/img] if intTemp = 65537 then intTemp:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751864.png[/img] if intTemp = 65536 then intTemp:=0; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751896.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751927.png[/img]ModMul:=intTemp; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751942.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803751974.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752005.png[/img]function ModXor(intXor1,intXor2:int64):int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752036.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752067.png[/img]ModXor:= intXor1 xor intXor2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752083.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752114.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752146.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752177.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752192.png[/img]procedure CreatePassword(strPassword:string;VAR arrPassword:array of int64;VAR arrOpenPassword:array of int64); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752224.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752255.png[/img]strKey:string; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752286.png[/img]strTemp:array[1..52] of string[4]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752317.png[/img]intStart,intCount:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752333.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752364.png[/img]strKey:=strPassword; // [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752396.png[/img]intCount:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752427.png[/img]intStart:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752458.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752474.png[/img]...{--------------------産生52個16bit的加密子密鑰部分-------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752505.png[/img]while (intCount<=52) do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752536.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752567.png[/img] strTemp[intCount]:=BinToHex(Copy(strKey,intStart,16)); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752583.png[/img] intStart:=intStart+16; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752614.png[/img] intCount:=intCount+1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752646.png[/img] if ((intCount mod 8) = 1) then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752677.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752708.png[/img] strKey:=LeftMove(strKey,25); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752724.png[/img] intStart:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752755.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752786.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752817.png[/img]intCount:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752833.png[/img]while (intCount<=52) do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752864.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752896.png[/img] arrPassword[intCount-1]:=HexToTen(strTemp[intCount]); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752927.png[/img] g_arr_Ten_Password[intCount]:=arrPassword[intCount-1]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752958.png[/img] intCount:=intCount+1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803752989.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753021.png[/img]CreateOpenPassword(arrOpenPassword); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753036.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753067.png[/img]...{--------------------産生52個16bit的加密子密鑰部分-------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753099.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753130.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753146.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753192.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753224.png[/img]procedure GetOpenPassword(intSource:int64;VAR intResult:int64;Flag:integer); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753239.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753271.png[/img]int_Source,int_Result,int_Mod_Value:int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753302.png[/img]int_Loop:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753333.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753349.png[/img]int_Source:=intSource; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753380.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753411.png[/img]...{--------------------求取每個加密子密鑰相應的解密子密鑰部分-------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753442.png[/img]Case Flag of [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753474.png[/img] 0: intResult:=int_Source; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753489.png[/img] 1: intResult:=65536-int_Source; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753521.png[/img] 2: [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753552.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753583.png[/img] if int_Source=0 then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753599.png[/img] intResult:=int_Source [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753646.png[/img] else [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753677.png[/img] for int_Loop:=1 to 65536 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753708.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753739.png[/img] int_Result:=Int64(int_Loop)*65537+1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753771.png[/img] int_Mod_Value:=int_Result mod int_Source; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753802.png[/img] if int_Mod_Value = 0 then [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753833.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753864.png[/img] int_Result:=int_Result div int_Source; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753880.png[/img] intResult:=int_Result; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753911.png[/img] break; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753942.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753974.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803753989.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754021.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754052.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754083.png[/img]...{--------------------求取每個加密子密鑰相應的解密子密鑰部分-------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754099.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754130.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754161.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754192.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754271.png[/img]procedure CreateKeyTable(); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754302.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754333.png[/img]int_Count_CreatePassword,int_Count_OpenPassword,int_ExChange:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754349.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754380.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754411.png[/img]...{----------------求取在産生解密子密鑰時所用的參數標志對應表部分-------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754442.png[/img]for int_Count_CreatePassword:=52 downto 1 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754458.png[/img] Case int_Count_CreatePassword mod 6 of [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754489.png[/img] 0,5:begin g_arr_Flag[int_Count_CreatePassword]:=0; end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754521.png[/img] 2,3:begin g_arr_Flag[int_Count_CreatePassword]:=1; end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754552.png[/img] 1,4:begin g_arr_Flag[int_Count_CreatePassword]:=2; end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754583.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754599.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754630.png[/img]...{----------------求取在産生解密子密鑰時所用的參數標志對應表部分-------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754661.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754692.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754724.png[/img]...{----------------求取每個加密子密鑰與相應解密子密鑰間的對應關系映射表部分-------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754755.png[/img]int_Count_CreatePassword:=52; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754771.png[/img]int_Count_OpenPassword:=1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754802.png[/img]while (int_Count_CreatePassword>=1) do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754880.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754896.png[/img] Case int_Count_CreatePassword mod 6 of [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754927.png[/img] 1,2,3,4: [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754958.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803754989.png[/img] g_arr_Table[int_Count_OpenPassword]:=int_Count_CreatePassword-3; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755021.png[/img] g_arr_Table[int_Count_OpenPassword+1]:=int_Count_CreatePassword-1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755036.png[/img] g_arr_Table[int_Count_OpenPassword+2]:=int_Count_CreatePassword-2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755067.png[/img] g_arr_Table[int_Count_OpenPassword+3]:=int_Count_CreatePassword; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755114.png[/img] if (int_Count_CreatePassword >=48) or (int_Count_CreatePassword <=4 ) then //首輪和末輪處理不需交換,故要再換回來 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755130.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755161.png[/img] int_ExChange:=g_arr_Table[int_Count_OpenPassword+1]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755192.png[/img] g_arr_Table[int_Count_OpenPassword+1]:=g_arr_Table[int_Count_OpenPassword+2]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755224.png[/img] g_arr_Table[int_Count_OpenPassword+2]:=int_ExChange; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755239.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755271.png[/img] int_Count_CreatePassword:=int_Count_CreatePassword-4; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755302.png[/img] int_Count_OpenPassword:=int_Count_OpenPassword+4; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755349.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755380.png[/img] 0,5: [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755411.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755442.png[/img] g_arr_Table[int_Count_OpenPassword]:=int_Count_CreatePassword-1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755458.png[/img] g_arr_Table[int_Count_OpenPassword+1]:=int_Count_CreatePassword; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755489.png[/img] int_Count_CreatePassword:=int_Count_CreatePassword-2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755521.png[/img] int_Count_OpenPassword:=int_Count_OpenPassword+2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755552.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755583.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755599.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755630.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755661.png[/img]...{----------------求取每個加密子密鑰與相應解密子密鑰間的對應關系映射表部分-------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755692.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755724.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755739.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755771.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755802.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755833.png[/img]procedure CreateOpenPassword(VAR arrOpenPassKey:array of int64); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755849.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755880.png[/img]int_Loop:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755911.png[/img]arrTemp:array[1..52] of int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755942.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755974.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803755989.png[/img]...{-------------通過調用産生加、解密子密鑰對應關系函數産生對應關系表部分------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803756021.png[/img]CreateKeyTable; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803756052.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803756083.png[/img]...{-------------通過調用求解解密子密鑰函數産生解密子密鑰部分------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803756114.png[/img]for int_Loop:=1 to 52 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803756755.png[/img] begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757099.png[/img] GetOpenPassword(g_arr_Ten_Password[int_Loop],arrTemp[g_arr_Table[int_Loop]],g_arr_Flag[int_Loop]); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757130.png[/img] end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757161.png[/img]for int_Loop:=1 to 52 do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757208.png[/img] arrOpenPassKey[int_Loop-1]:=arrTemp[int_Loop]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757239.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757271.png[/img]...{-------------通過調用求解解密子密鑰函數産生解密子密鑰部分------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757302.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757333.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757349.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757380.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757411.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757442.png[/img]procedure Riddle(arrPassword:array of int64;arrRiddleKey:array of int64;VAR arrOpenPassword:array of int64); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757458.png[/img]var [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757489.png[/img]Count,i:integer; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757521.png[/img]V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,C1,C2,C3,C4,ExChange:int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757552.png[/img]P:array[1..4] of int64; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757583.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757599.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757630.png[/img]...{------------------------數據 "解密" 算法實現部分------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757661.png[/img]for i:=Low(arrPassword) to High(arrPassword) do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757692.png[/img] P[i+1]:=arrPassword[i]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757724.png[/img]Count:=0; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757739.png[/img]while (Count<48) do [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757771.png[/img]begin [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757802.png[/img] V1:= ModMul(P[1],arrRiddleKey[Count],1); //相乘 1 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757833.png[/img] Inc(Count); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757849.png[/img] V2:= ModAdd(P[2],arrRiddleKey[Count]); //相加 2 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757880.png[/img] Inc(Count); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757911.png[/img] V3:= ModAdd(P[3],arrRiddleKey[Count]); //相加 3 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757942.png[/img] Inc(Count); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803757958.png[/img] V4:= ModMul(P[4],arrRiddleKey[Count],1); //相乘 4 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758005.png[/img] Inc(Count); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758036.png[/img] V5:= ModXor(V1,V3); //異或 5 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758067.png[/img] V6:= ModXor(V2,V4); //異或 6 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758099.png[/img] V7:= ModMul(V5,arrRiddleKey[Count],1); //相乘 7 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758130.png[/img] Inc(Count); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758146.png[/img] V8:= ModAdd(V6,V7); //相加 8 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758177.png[/img] V9:= ModMul(V8,arrRiddleKey[Count],1); //相乘 9 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758208.png[/img] Inc(Count); [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758239.png[/img] V10:=ModAdd(V7,V9); //相加 10 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758255.png[/img] V11:=ModXor(V1,V9); //異或 11 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758286.png[/img] V12:=ModXor(V2,V10); //異或 12 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758317.png[/img] V13:=ModXor(V3,V9); //異或 13 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758349.png[/img] V14:=ModXor(V4,V10); //異或 14 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758380.png[/img] P[1]:=V11; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758396.png[/img] P[2]:=V13; //注意:交換中間兩個輸出結果 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758442.png[/img] P[3]:=V12; //注意:交換中間兩個輸出結果 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758474.png[/img] P[4]:=V14; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758521.png[/img]end; //結束8輪計算 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758552.png[/img]ExChange:=P[2]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758583.png[/img]P[2]:=P[3]; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758614.png[/img]P[3]:=ExChange; //因爲最後一輪無需轉換,所以必須把P[2],P[3]再次轉換回來 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758646.png[/img]C1:= ModMul(P[1],arrRiddleKey[48],1); //相乘 1 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758677.png[/img]C2:= ModAdd(P[2],arrRiddleKey[49]); //相加 2 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758708.png[/img]C3:= ModAdd(P[3],arrRiddleKey[50]); //相加 3 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758724.png[/img]C4:= ModMul(P[4],arrRiddleKey[51],1); //相乘 4 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758755.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758786.png[/img]...{------------------------數據 "解密" 算法實現部分------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758817.png[/img]arrOpenPassword[Low(arrOpenPassword)]:=C1; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758833.png[/img]arrOpenPassword[Low(arrOpenPassword)+1]:=C2; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758864.png[/img]arrOpenPassword[Low(arrOpenPassword)+2]:=C3; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758896.png[/img]arrOpenPassword[Low(arrOpenPassword)+3]:=C4; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758927.png[/img]//數據解密成功! [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758942.png[/img]end; [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803758974.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803759005.png[/img]...{--------------------------------------------------------------------} [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803759036.png[/img] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803759067.png[/img]end. [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803759083.png[/img]
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有