完整版IDEA密码算法.docx
- 文档编号:3439966
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:16
- 大小:396.16KB
完整版IDEA密码算法.docx
《完整版IDEA密码算法.docx》由会员分享,可在线阅读,更多相关《完整版IDEA密码算法.docx(16页珍藏版)》请在冰豆网上搜索。
完整版IDEA密码算法
陕西科技大学实验报告
班级:
信息062学号:
200612030223姓名:
孙丹龙实验组别:
实验日期:
报告日期:
成绩:
报告内容:
(目的和要求、原理、步骤、数据、计算、小结等)
实验名称:
IDEA密码算法实验
一、实验目的
(1)通过实验熟练掌握IDEA密码算法,学会IDEA算法程序设计
(2)提高C++程序设计能力。
二、实验要求
(1)熟练掌握IDEA密码算法。
(2)学会IDEA算法程序设计,提高C++程序设计能力。
(3)独立完成实验,并按时完成实验报告。
三、实验原理(流程图):
64比特的数据块分成4个子块X,,X2,X3和X4,每一个子块16比特,作为第1轮的输入,全部共8轮迭代。
运算步骤如下:
(1)X1和第1个子密钥块作乘法运算。
(2)X2和第2个子密钥块作加法运算。
(3)X3和第3个子密钥块作加法运算。
(4)X4和第4个子密钥块作乘法运算。
(5)
(1)和⑶结果作异或运算。
(6)
(2)和⑷结果作异或运算。
(7)(5)的结果与第5个子密钥块作乘法运算。
(8)(6)和⑺结果作加法运算。
(9)(8)的结果与第6个子密钥块作乘法运算。
(10)(7)和(9)结果作加法运算。
(11)
(1)和(9)结果作异或运算。
(12)(3)和(9)结果作异或运算。
(13)
(2)和(10)结果作异或运算。
(14)(4)和(10)结果作异或运算。
结果的输出为(11),(13),(12),(14)。
除最后一轮(第8轮)外,第2和第3块交换。
第8轮结束后,最后输出的变换有:
(1)Xj和第1个子密钥块作乘法运算。
(2)X2和第2个子密钥块作加法运算。
(3)X3和第3个子密钥块作加法运算。
(4)X4和第4个子密钥块作乘法运算。
子密钥块每轮6个,最后输出变换4个,共52个。
首先将128比特的密钥分成8个子密钥,每个子密钥16比特。
这8个子密钥正好是第1轮的6个及第2轮的前两个。
再将密钥左旋25比特,再将它分成8个子密钥。
前4个是第2轮的子密钥,后4个是第3轮的子密钥。
将密钥再左旋25比特,产生后8个子密钥。
依此类推,直到算法结束。
r
&
K3
K4
K5
K6
1
0-15
16-31
32-47
48-63
64-79
80-95
2
96-111
112-127
25-40
41-56
57-72
73-88
3
89-104
105-120
121-8
:
9-24「
50-65
66-81
4
82-97
98-113
114-1
2-17
18-33
34-49
5
75-90
91-106
107-122
123-10
11-26
27-42
6
43-58
59-74
100-115
116-3
4-19
20-35
7
36-51
52-67
68-83
P84-99「
125-12
13-28
8
29-44
45-60
61-76
77-92
93-108
109-124
9
22-37
38-53
54-69
70-85
-
-
表1IDEA的密钥扩展过程
设密钥kk1k2&28分成8段,依次为
再将k向左旋移位25比特k26k27k128k1k2k25
分8段,前4段是第2轮的子密钥z32),z42),z52),z62);后4段依次是乙⑶,z23),
z33),z43)。
继续以上步骤,直到52个子密钥生成完毕。
解密过程和加密完全一样,只不过解密用的子密钥不同。
解密密钥和加密密钥有一个对应关系。
这里Z1表示Zmod(2161)乘法的逆,即ZOZ1=1mod(2161)
Z表示Zmod216加法运算的逆,即Z田Z=0mod216
F面讨论解密的运算地正确性。
用A表达步骤
(1)~(4),B表达(5)~(14)步骤,包
括第2、第3两部分的交换。
(在图中,第8轮结束后不交换,但是为了B完整性,在第8
轮做了交换,所以第9轮的输入要给他们再换回来)
明文设为(X1,X2,X3,X4),密文为(丫心上飞)
加密运算的第9轮有:
丫1WOZ1(9),丫2W8-Z2(9),丫3W82—Z39),
丫4W84OZJYl'Y2"3,丫4作为解密运算的输入,解密运算的第1轮有:
可见解密第1轮A的输出恰好是加密第8轮的输出。
(?
为什么是这样?
因为在图中第
8轮结束后,多交换了一次?
本来应是W81,W83,W82,W84)
再看IDEA加密算法的主要构成模块MA,如图所示:
W81
I81
MA(r)(
I81I83,I82I
184)
W82
I83
MA(r)(
I81I83,
I82I
84)
W83
I82
MA(l)(
I81I83,I82I
184)
W84
I84
MA(l)(
I81I83,
I82I
84)
Vn
J11
MA(r)(
J11J13,J12
J14)
=W81
MA(r)
(W81
W82,W83
W84)
W81
W82
=I81
MA(r)(I81I83
I82
I84)
I83
MA(r)
(I81I83
I82
I84
=I81
I83
W83
W84=
=I82
MA⑴(I81I83,
I82
I84)
I84
MA(l)(
I81I83,
I82I
84)
=I82
I84
MA(l)(U,V)表示MA的左边的输出,MA⑴(U,V)表示MA的右边的输出。
则有:
所以Vii丨81
MA(r)(I81
MA(r)(I8i
I83,I82
I84)=I81
I83,I82I84)
同样可证:
V12丨83,V13丨82,V14打4这就证明了解密运算的第1轮B的输出,
正好是加密运算第8轮的A的输入,不过第2块和第3块交换。
依此类推,可证:
V81111,
V82I13,V$3I12,V84I14所以最后一轮的输出为:
V81o(Z1⑴)1go(Z1⑴)1=X1O(Z1⑴)O(Z1⑴)1=X1
V83^(Z21))』(Z21))=X2圧(Zy)^(Z21))=X2
V82^(Z31))113田(Z31))=X3田(Z31))田(Z31))=、
V84o(z4°)1丨14o(z4°)1=X4o(z4°)o(Z41))1=X4
故输出的明文为(x“x2,x3,x4)
四、实验数据(源代码):
//IDEA密码算法
#inelude
#inelude
#inelude
usingnamespaeestd;
constunsignedintN=256;〃mod(pow(2,8))=256
constunsignedintMUL=65537;〃16比特的整数做mod(pow(2,16)+1)=65537的乘法运算
输入明文字符串m和密钥序列k
图1总体流程图
图2加密算法
constunsignedintADD=65536;〃16比特的整数做mod(pow(2,16))=65536的加法运算
stringkey_change(unsignedintn,intk)〃十进制数倒序变换为k位二进制
{
stringresult;
for(inti=O;i { if((i! =O)&&! (i%4))result+=","; if(n%2)result+="1"; elseresult+="0"; n/=2; } returnresult; } stringchange(unsignedintn,intk)//十进制数顺序变换为k位二进制 { stringresult; for(inti=0;i { if((i! =0)&&! (i%4))result=","+result; if(n%2)result="1"+result; elseresult="0"+result; n/=2; } returnresult; } voidset_key(unsignedintkey[],unsignedintz[9][6])〃生成密钥模块 { inti,j,k,flag=O,t=O; unsignedintsum,temp[9][6][16]; for(i=0;i<9;i++) { for(j=0;j<6;j++) { for(k=0;k<16;k++) temp[i][j][k]=key[(flag+t++)%128]; if(! (i==j==0)&&((6*i+j)%8)==7)flag+=25; } } for(i=0;i<9;i++) { for(j=0;j<6;j++) { sum=0; for(k=0;k<16;k++) if(temp[i][j][k]) sum+=pow(2,k); z[i][j]=sum; } } } voidset_m(unsignedintwrite[],unsignedintx[])〃生成明文模块 { inti,j; unsignedintsum; for(i=0;i<64;i+=16) { sum=0; for(j=0;j<16;j++) if(write[i+j])sum+=pow(2,j); x[i/16]=sum; } } voidstring_bb(stringstr,unsignedintresult[])〃字符序列转换为二进制 { inti,j; unsignedinttemp; for(i=0;i { temp=str[i]; for(j=0;j<8;j++) { if(temp%2)result[8*i+j]=1; elseresult[8*i+j]=0; temp=temp/2; } } }voidencrypt(unsignedintx[],unsignedintz[9][6]){ intt,j; result[4]=result[0]Wesult[2];〃 (1)和⑶结果作异或运算 result[5]=result[1]Aresult[3];〃 (2)和⑷结果作异或运算 result[6]=(result[4]*z[t][4])%MUL;〃(5)的结果与第5个子密钥块作乘法运算 result[7]=(result[5]+result[6])%ADD;//(6)和⑺结果作加法运算result[8]=(result[7]*z[t][5])%MUL;〃(8)的结果与第6个子密钥块作乘法运算 result[9]=(result[6]+result[8])%ADD;//(7)和(9)结果作加法运算 result[10]=result[0]Aresult[8]; result[11]=result[2]Aresult[8]; result[12]=result[1]Aresult[9]; result[13]=result[3]Aresult[9]; cout<<"\n第"< for(j=0;j<14;j++) cout<<"\tStep"< // (1)和(9)结果作异或运算 //(3)和(9)结果作异或运算 // (2)和(10)结果作异或运算 //(4)和(10)结果作异或运算 "< \t\t"< cout<<"\nresult[10]="< cout<<"result[13]="< cout<<""< x[0]=result[10];x[1]=result[12];x[2]=result[11];x[3]=result[13];〃除最后一轮(第 9轮) 外,第2和第3块交换 cout<<"\t"< } intmain() { inti,j,t; unsignedintsum,temp,x[4],z[9][6],key[128],write[64]; stringm,k,str; cout<<"\t\t\tlDEA密码算法"; cout<<"\n请输入明文字符串: ";cin»m; cout<<"\n请输入密钥: ";cin»k; cout<<"\n\t\t密钥为k="< string_bb(k,key);〃将密钥字符序列转换为二进制,存放于数组key[128] cout<<"k="< for(i=0;i<128;i++) { cout< if((i! =O)&&(i%8)==7)cout<<""; if((i! =O)&&(i%32)==31)cout< } string_bb(m,write);〃将明文字符序列转换为二进制,存放于数组write[64] cout<<"\n\t\t\t明文是m="< cout<<"m="< for(i=0;i<64;i++) { cout< if((i! =0)&&(i%8)==7)cout<<""; if((i! =0)&&(i%32)==31)cout< } set_key(key,z);〃生成密钥模块z[9][6] cout<<"\n=====>密钥模块: \n"< for(i=0;i<9;i++) { for(j=0;j<6;j++) { cout<<"z["< if(j%2)cout< } cout< } for(i=0,j=0;i<4;i++,j+=2)x[i]=m[j+1]*pow(2,8)+m[j]; set_m(write,x);〃生成明文模块x[4] cout<<"\n=====>明文模块: \n"< for(i=0;i<4;i+=2) cout<<"x["< ************************************************************************ encrypt(x,z);return0; } 五、程序运行结果: 1、运行程序,提示输入明文字符串m和密钥序列k,然后输出明文和密文以及将各自转换为16位二进制表示形式,如下图所示: g*F: VTC++\Dehi]ig\M件TUI? A宪码筒法- ■・・・・・・・・・・■・■・■・■・■・■・■■: M・■・ IDER密诃舁袪 请辙入明文宁符串! Tainsert 请输入密4^compute ^^.^Ik-tOnpiitersECin'ity 明文是n=Tsinghua 2、由密钥序列k生成密钥模块,如下图所示: 兀"F: \VClIDEA密珂算法-“J "■“》密钥楝块匕 zLinn 1100.0110.1111,0110 z[lK2J 1011.0110.0000.1110 z(ll[3] 1010,111B.W10,111< z[lH4J 1010.&L10.Q100.1110 ^[1J[5] im.iiie.i0i0.eii* zCllIGl ? (2iri1 R11110^1081,0110 2rs)[2i ZL21C3] 0001,1101,8101,1100 2[2][4j Bioi^1161*0iGained M[2][GJ 0100,1181^1800^1131 ziEOlCl] 0101,1100^16811,1101 3[3312] B81SrllQO,01Ol,1191 zlT31[3] 0011,1181,1800.1101 z[3][43 lliar1101rBJlS,113Q 匕[3】囚1 0001,1181,8181^1100 E][^1 B161F1101r8iBa,nag ^C41CL] 1001,1161,1081,11Bl S[43T2J 0160^1101,1008,1181 乂⑷口] 0101,1166^1601,1101 z DOlOUlSBrQIOlUlBl M【豹巧J QBuaiiiaflMaiei ZE43161 iiHuuu^eii^iiBe e(5ILl] ZE5JE21 uiei,liei”uiuo,ii0tj e⑸⑶ ZC5314J U10M,11011101 z[5lL&] auiM^iiuu^iuiuioi z(6)[l] 0011,11613060,1101 z[^](2] 1110^1101,0110,1160 z[6H3] 0001,1161.0101>1100 zH][4J 0101.1101,0100,1100 ”【£】[£】 1001,1101.1001^1101 eHIEGI 0100.1101^1^00,1161 2[? )[1] 0101,1100,1001,1101 eC7J[21 0010.11^0,0101,1101 2L7H31 0011,1101,1000,1101 ■E73E4] 1110,1101,0110,1100 zL7)[5J 0001,1101,0101,1100 eE7][6] 0101,1101,0100,1100 zLSHl] 1001,1101.1001,1101 ECIJE2J 010QPllQia@00.11Ol sCSJEJ] R1R1-1100,1001.1101 e(S](41 001fl.1100,R101.llA1. ^CS)[51 mu.liei.lflan.iiQi zrftirgl til0_1101,RH«,llftA ^[9irt] aam.”mai,0ibi,1ibh ^[43121 Blial,1101“BlBO^llHn 1901,1101.1601.1101 z[43C4J ^100,1101.1808,11H1 1[C] 0101,11QQ,1601,1101 2[93L£J &01G丄 3、由明文字符串m生成明文模块,如下图所示: 4、循环迭代8次,如下图所示: 复ftexe f・.NJtNJtN良貝良貝覽W覽・軾此貿MKMlC袒見・科BtJlXJlIfJtlCjtNjtXjt 弟丄趙 Stepl 丄101,001丄,01B0,lilt Step2 1101,1110,1101,0110 Step3 丄101.110S,11B1,1103 Step4 0110.0001,1001,1191 StepS 0000.1111,1001,0011 StepG 1011,1111,B1B0,1011 Step? 1111,0111,1101,1110 StepS i0i: Uatli,lest Step? BailP1101,iibi,iiii SteplO 0011,0181,1011,1101 Stevll 1110^1110,1001,0003 Ste>)12 llie^0B01,000叫0011 Ilia,1811,8110,1B11 Ste>)14 0101p010B「0010^0003 res«UL10]=tie721110,1lie,10F11,0000result[121=632&71110.1011,0110^1011result1111=5760? [jJO月阴1.阳腼『同PUresult[131=21536肌阳山1胴川如叫肿胴 影趟 六、实验小结: 本次试验让我们进一步掌握了IDEA加密算法以及其设计思想,运用了较广知识点,比 如,数制之间的转换及储存形式,二进制数之间的加法、乘法、取余、异或运算以及移位等等。 在次,统一运用十进制计算,最后以二进制形式输出,简化了编程步骤,方便数据之间的处理。 由于迭代次数较多,在编程中没能理清各个变量之间的关系,出现了许多错误,但在同学的帮助和自己的努力下,一一予以解决。 通过本次实验,不但巩固了对IDEA加密算 法的掌握情况,而且锻炼了自己的VC/C++编程能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 IDEA 密码 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)