- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三_RC4算法_20103259_方立春
上海电力学院
Shanghai University of Electric Power
实验报告
院系名称: 计算机科学与技术学院 _______
课程名称: 密码编码学与网络安全 _______
实验项目名称: RC4算法设计 ______________
班级与班级代码: 2010151班 _________
学生姓名: 方立春 学号:_____
同组同学姓名:邓君 刘海涛 刘和平 庄晓琛 马昶杰
指导教师: 田秀霞 _____________
实验日期: 2012/11/2 ____________
实验一 RC4密码算法算法实现
一、实验目的
理解流密码的概念及相关结构;
理解并能够编写基本的流密码体制;
熟练应用C++编程实现RC4密码算法体制
二、实验内容:编程实现RC4加算法用1~256个字节(8~2048位)的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…,S[255],从始至终置换后的S包含从0到255的所有8位数。对于加密和解密,字节K是从S的255个元素中按一种系统化的方式选出的一个元素生成的。每生成一个K的值,S中的元素个体就被重新置换一次。
三、实验步骤(包括流程图、功能模块)
密钥调度算法(KSA,Key-Scheduling Algorithm)
设置内部状态(s[0],…,s[255])的随机排列。
开始时,内部状态中的元素被初始化为0~255,既s[i]=i(i=0,…,255);
密钥长度可变,设为L个字节(K[0],…,K[L-1]);
L一般为5~32之间,用L个字节不断重复填充,直至得到K[0],…,K[255],用于对内部状态S进行随机化。
j=0
对i=0,…,255做
j=j+S[i]+K[i] mod 256
互换s[i]与s[j]
伪随机生成算法(PRGA, Pseudo Random Generation Algorithm)
从内部状态中选取一个随机元素作为密钥流中的一个字节,并修改内部状态以便下一次选择。
选取过程取决于索引值i和j,它们的初始值均为0。
i=0
j=0
重复下述步骤,直至获得足够长度的密钥流:
i=i+1 mod 256
j=j+S[i] mod 256
互换s[i]与s[j]
t=S[i]+S[j] mod 256
K=S[t]
microsoft visual C++编辑环境下编写DES代码并编译,连接,调试运行正确后保存cpp文件并截图。
五、软件使用说明(开发环境、参数使用详细说明、实验结果+相应截图等)
开发环境:Microsoft Visual C++ 6.0;
测试数据:
密钥key: 其实RC4算法很简单!
明文:fanglichun
参数使用详细说明:
首先双击运行生成的RC4.exe文件;
根据.exe文件的提示输入自己设定的密钥和要加密解密的字符进行加解密。
实验结果:输入测试数据进行加解密,结果均正确
相应测试截图:
六、参考资料(书籍或网络文章)
密码编码学与网络安全—原理与实践(第五版)
百度文库
七、实验心得和总结
在编写RC4算法的过程中,相比AES和DES算法而言,我觉得思路很清晰,因为RC4算法的实现很简单,就包括KSA(初始化S盒)和PRGA(密钥流的生成)算法的编写,而且课本中也给了一些关键性的代码供我们参考,一看就一目了然。剩下的只是对具体的实现了,其中会用到Swap函数的实现和一些模运算,这都是一些基础的东西,我都能够编程一一实现。
RC4算法是流密码的典型代表,通过学习和编写RC4算法,我对流密码的理解也更加的深刻了,流密码的原理如下图所示;很明显,在解密端,密文流与完全相同的密钥流异或运算恢复出明文流。RC4算法其加密密钥和解密密钥相同
总之,通过编写RC4算法,是我进一步明白编程时我们一定要有清晰的算法思路,要知道我们自己要干什么,用哪一种的编程思路更好,函数参数应该怎么设置,这都需要一定的技巧。当遇到编写和调试所不能解决的问题时,决不能闭门造车瞎苦恼,一定要积极查阅资料,请教同学老师寻求解决办法,因为你有可能可以找到更好地解决方案。我觉得算法的实现并不是自己一定要把它完全自己编出来,关键还是算法思想,只有掌握了算法
文档评论(0)