ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:396.16KB ,
资源ID:3439966      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3439966.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整版IDEA密码算法.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整版IDEA密码算法.docx

1、完整版IDEA密码算法陕西科技大学实验报告班级: 信息062 学号:200612030223姓名: 孙丹龙 实验组别: 实验日期: 报告日期: 成绩: 报告内容:(目的和要求、原理、步骤、数据、计算、小结等)实验名称:IDEA密码算法实验一、 实验目的(1)通过实验熟练掌握IDEA密码算法,学会IDEA算法程序设计(2)提高C+程序设计能力。二、 实验要求(1)熟练掌握IDEA密码算法。(2)学会IDEA算法程序设计,提高 C+程序设计能力。(3)独立完成实验,并按时完成实验报告。三、实验原理(流程图):64比特的数据块分成 4个子块X,,X2,X3和X4,每一个子块16比特,作为第1 轮的输

2、入,全部共 8轮迭代。运算步骤如下:(1)X1和第1个子密钥块作乘法运算。(2)X 2和第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)

3、 , (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个子密钥。依此类推,直到算法结束。

4、r&K3K4K5K610-1516-3132-4748-6364-7980-95296-111112-12725-4041-5657-7273-88389-104105-120121-8:9-2450-6566-81482-9798-113114-12-1718-3334-49575-9091-106107-122123-1011-2627-42643-5859-74100-115116-34-1920-35736-5152-6768-83P 84-99125-1213-28829-4445-6061-7677-9293-108109-124922-3738-5354-6970-85-表1 I

5、DEA 的密钥扩展过程设密钥k k1 k2 &28分成8段,依次为再将k向左旋移位25比特 k26k27 k128k1k2 k25分8段,前4段是第2轮的子密钥z32),z42),z52),z62);后4段依次是乙,z23),z33),z43)。继续以上步骤,直到 52个子密钥生成完毕。解密过程和加密完全一样,只不过解密用的子密钥不同。解密密钥和加密密钥有一个对应关系。这里 Z 1 表示 Zmod(216 1)乘法的逆,即 Z O Z 1 = 1mod(216 1)Z表示Z mod 216加法运算的逆,即Z田 Z = 0 mod 216F面讨论解密的运算地正确性。用 A表达步骤(1) (4)

6、, B表达(5) (14)步骤,包括第2、第3两部分的交换。(在图中,第8轮结束后不交换,但是为了 B完整性,在第8轮做了交换,所以第 9轮的输入要给他们再换回来)明文设为(X1,X2,X3,X4),密文为(丫心上飞)加密运算的第 9 轮有:丫1 W O Z1(9) , 丫2 W8- Z2(9) , 丫3 W82 Z39),丫4 W84 O ZJ YlY23,丫4作为解密运算的输入,解密运算的第 1轮有:可见解密第1轮A的输出恰好是加密第 8轮的输出。(?为什么是这样?因为在图中第8轮结束后,多交换了一次?本来应是 W81 , W83, W82 , W84)再看IDEA加密算法的主要构成模块

7、MA,如图所示:W81I 81MA(r)(I 81 I 83 , I 82 I1 84 )W82I 83MA(r)(I 81 I 83 ,I 82 I84 )W83I 82MA(l)(I 81 I 83 , I 82 I1 84 )W84I 84MA(l)(I 81 I 83 ,I 82 I84 )VnJ11MA(r)(J11 J13, J12J14 )=W81MA(r)(W81W82 , W83W84 )W81W82=I 81MA(r)( I81 I83,I 82I 84 )I 83MA(r)(I 81 I 83,I 82I 84=I81I 83W83W84 =I 82MA(I 81 I 8

8、3 ,I 82I 84 )I 84MA(l)(I 81 I 83 ,I 82 I84 )=I82I 84MA(l)(U ,V)表示MA的左边的输出, MA(U,V)表示MA的右边的输出。则有:所以Vii丨81MA(r)( I81MA(r)( I8iI 83 , I 82I 84 ) = I 81I 83 , I 82 I 84 )同样可证:V12丨83 , V13丨82 , V14 打4这就证明了解密运算的第 1轮B的输出,正好是加密运算第 8轮的A的输入,不过第2块和第3块交换。依此类推,可证:V81 111,V82 I 13, V$3 I 12, V84 I 14所以最后一轮的输出为:V8

9、1 o (Z1)1 go (Z1)1 = X1 O (Z1)O (Z1)1 = X1V83( Z21)(Z21) = X2 圧(Zy)( Z21) = X2V82( Z31)113田(Z31)= X3田(Z31)田(Z31)=、V84 o(z4)1 丨14 o(z4)1 = X4 o(z4)o(Z41)1 = X4故输出的明文为(x“x2,x3,x4)四、实验数据(源代码):/IDEA密码算法#in elude #in elude #in elude using n amespaee std;const un sig ned int N=256; mod(pow(2,8)=256con st

10、un sig ned int MUL=65537; 16 比特的整数做 mod(pow(2,16)+1)=65537 的乘法运算输入明文字符串m和密钥序列k图1总体流程图图2加密算法con st un sig ned int ADD=65536; 16 比特的整数做 mod(pow(2,16)=65536 的加法运算string key_change(unsigned int n,int k) 十进制数倒序变换为 k 位二进制stri ng result;for(i nt i=O;ik;i+)if(i!=O)&!(i%4) result+=,;if(n%2) result+=1;else re

11、sult+=0;n/=2;return result;string change(unsigned int n,int k)/十进制数顺序变换为 k位二进制stri ng result;for(i nt i=0;ik;i+)if(i!=0)&!(i%4) result=,+result;if(n %2) result=1+result;else result=0+result;n/=2;return result;void set_key(u nsig ned int key,u nsig ned int z96) 生成密钥模块int i,j,k,flag=O,t=O;unsigned int

12、 sum,temp9616;for(i=0;i9;i+)for(j=0;j6;j+)for(k=0;k16;k+)tempijk=key(flag+t+)%128;if(!(i=j=0)&(6*i+j)%8)=7) flag+=25;for(i=0;i9;i+)for(j=0;j6;j+)sum=0;for(k=0;k16;k+)if(tempijk)sum+=pow(2,k);zij=sum;void set_m(un sig ned int write, un sig ned int x) 生成明文模块int i,j;un sig ned int sum;for(i=0;i64;i+=16

13、)sum=0;for(j=0;j16;j+)if(writei+j) sum+=pow(2,j);xi/16=sum;void string_bb(string str,unsigned int result) 字符序列转换为二进制int i,j;un sig ned int temp;for(i=0;istr.le ngth();i+)temp=stri;for(j=0;j8;j+)if(temp%2) result8*i+j=1;else result8* i+j=0;temp=temp/2; void en crypt( un sig ned int x, un sig ned int

14、z96) int t,j;result4=result0Wesult2; (1)和结果作异或运算result 5=result1Aresult3; (2)和结果作异或运算result6=(result4*zt4)%MUL; (5)的结果与第 5个子密钥块作乘法运算result7=(result5+result6)%ADD;/(6) 和结果作加法运算 result8=(result7*zt5)%MUL; (8)的结果与第 6个子密钥块作乘法运算result9=(result6+result8)%ADD;/(7)和(9)结果作加法运算result10=result0Aresult8;result1

15、1=result2Aresult8;result12=result1Aresult9;result13=result3Aresult9;coutn 第t+1趟for(j=0;j14;j+)couttStepj+1t/(1)和(9)结果作异或运算/(3)和(9)结果作异或运算/(2)和(10)结果作异或运算/(4)和(10)结果作异或运算endlendl;/(4)和(10)结果作异或运算ttcha nge(resultj,16)e ndl;coutnresult10=result10 cha nge(result10,16)t; coutresult12=result12 cha nge(res

16、ult12,16)e ndl; coutresult11=result11 cha nge(result11,16)t;coutresult13=result13 cha nge(result13,16)e ndl;cout e ndl;x0=result10;x1=result12;x2=result11;x3=result13; 除最后一轮(第9轮)外,第2和第3块交换couttcha nge(x0,16)tcha nge(x1,16)e ndl; couttcha nge(x2,16)tcha nge(x3,16)e ndl;int mai n()int i,j,t;unsigned i

17、nt sum,temp,x4,z96,key128,write64;string m,k,str;couttttlDEA 密码算法;coutn请输入明文字符串:;cinm;coutn 请输入密钥:;cink;coutntt 密钥为 k=kendlendl;string_bb(k,key);将密钥字符序列转换为二进制,存放于数组 key128coutk=e ndl;for(i=0;i128;i+)coutkeyi;if(i!=O)&(i%8)=7) cout;if(i!=O)&(i%32)=31) coute ndl;string_bb(m,write);将明文字符序列转换为二进制,存放于数组

18、write64coutnttt 明文是 m=mendlendl;coutm=e ndl;for(i=0;i64;i+)coutwritei;if(i!=0)&(i%8)=7) cout;if(i!=0)&(i%32)=31) coute ndl;set_key(key,z); 生成密钥模块 z96cout 密钥模块:nendl;for(i=0;i9;i+)for(j=0;j6;j+)coutzi+1j+1 key_cha nge(zij,16)t;if(j%2) coute ndl;coute ndl;for(i=0,j=0;i4;i+,j+=2) xi=mj+1*pow(2,8)+mj;se

19、t_m(write,x); 生成明文模块 x4cout 明文模块:nendl;for(i=0;i4;i+=2)coutxi=xitkey_cha nge(xi,16)txi+1=xi+1 tkey_cha nge(xi+1,16)e ndl;*en crypt(x,z); return 0;五、程序运行结果:1、运行程序,提示输入明文字符串 m和密钥序列k,然后输出明文和密文以及将各自转换 为16位二进制表示形式,如下图所示:g *F: VTC+DehiigM件 TUI?A宪码筒法- :MIDER密诃舁袪请辙入明文宁符串! Ta insert请输入密4 compute.Ik-tOnpiiter

20、sECinity明文是 n=T s inghua2、由密钥序列k生成密钥模块,如下图所示:兀F:VCl IDEA密珂算法-“ J“密钥楝块匕zLinn1100.0110.1111,0110zlK2J1011.0110.0000.1110z(ll31010 ,111B. W10,1111100zH4J0101.1101,0100,1100”【】1001,1101.10011101eHIEGI0100.1101100,11612?)10101,1100,1001,1101eC7J210010.110,0101,11012L7H310011,1101,1000,1101 E73E41110,1101

21、,0110,1100zL7)5J0001,1101,0101,1100eE760101,1101,0100,1100zLSHl1001,1101.1001,1101ECIJE2J010QPllQia00.11OlsCSJEJR1R1-1100,1001.1101e(S(41001 fl. 1100, R101.ll A1.CS)51mu.liei.lflan.iiQizrftirgltil0_1101,RH,llftA9 irt aam. ”mai,0ibi,1ibh43121Blial,1101 “ Bl BOllHn1901,1101.1601.1101z43C4J100,1101.180

22、8,11H11 C0101,11QQ,1601,11012 9 3L J&01G 丄3、由明文字符串 m生成明文模块,如下图所示:4、循环迭代8次,如下图所示:复ft exef .N JtNJtN 良貝良貝覽 W 覽軾此貿MKMlC 袒見科 BtJlXJlIfJtlCjtNjtXjt弟丄趙Stepl丄101,001丄,01B0, liltStep21101,1110,1101,0110Step3丄101.110S,11B1,1103Step40110.0001,1001,1191StepS0000.1111,1001,0011StepG1011,1111,B1B0,1011Step?1111,

23、0111,1101,1110StepSi0i:U at li, lestSt ep?BailP1101,iibi,iiiiSteplO0011,0181,1011,1101Stevll11101110,1001,0003Ste)12llie0B01,000叫 0011Ilia,1811,8110,1B11Ste)140101p 010B00100003resUL10=tie72 1110,1 lie, 10F11,0000 result12 1=632&7 1110.1011,01101011 result 1111=5760? jJO月阴1.阳腼同PU result131=21536肌阳山1胴川如叫肿胴影趟六、实验小结:本次试验让我们进一步掌握了 IDEA加密算法以及其设计思想, 运用了较广知识点, 比如,数制之间的转换及储存形式,二进制数之间的加法、乘法、取余、异或运算以及移位等 等。在次,统一运用十进制计算,最后以二进制形式输出,简化了编程步骤,方便数据之间 的处理。由于迭代次数较多,在编程中没能理清各个变量之间的关系,出现了许多错误,但 在同学的帮助和自己的努力下,一一予以解决。通过本次实验,不但巩固了对 IDEA加密算法的掌握情况,而且锻炼了自己的 VC/C+编程能力。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1