统计频率分析周期RC4算法实现.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
统计频率分析周期RC4算法实现

网络密码实验报告 实验名称 RC4算法实现 学 号 028 实验日期 2014.04.16 实验报告要求: 1.实验目的 2.实验要求 3.实验环境 4.实验作业 5.问题及解决 6.思考问题 7.实验体会 【实验目的】掌握维吉尼亚多表加密算法原理,学会使用 掌握RC4算法原理,用程序实现RC4算法加解密。 【实验】 2、程序实现【实验】Vs2010 【实验】 【实验】【】【实验体会】 2. 成绩 优 良 中 及格 不及格 教师签名: 日期: 实验作业: 、 1. 原理 1.1 Kasiski方法原理:the有几率被密钥的相同部分加密,即原文中的the可能在密文中呈现为相同的三个字母。在这种情况下,相同片段的间距就是密钥长度的倍数。所以我们可以通过在密文中找到相同的片段,计算出这些相同片段之间的间距,而密钥长度理论上就是这些间距的公约数。 1.2 分析原理: 上面的原理,我们编程求出密文这些重复字段的间距,然后进行分析,缩小范围,从而找到可能的密钥周期。 先假定一个周期在程序中数来表示,比如表示的就是周期长度为范围之内的),然后通过for循环将符合这个长度范围的密文段,并求出它们的然后距离的约数如果能找到公约数,这个公约数作为可能的密钥周期测试。找到最小的公约数该公约数就是密钥长度。2. 通过程序分析密钥周期 一组比较大的,比如通过可得,超过,不存在相同的字符串。如图所示 然后输入一组数,如结果如下显示完全)得到的距离都是被被,这时候可以猜测可能是第一步可知,此解不) 我们再次输入一组数,比如30和40,运行结果如下(没有显示完全): 可以看到其距离还是1077,所以我们猜测密钥周期可能就是3。 继续输入更小数,20和30,运行结果如下图(没有显示完全): 可以看到距离有两种,一个是1077,另一个是2391,其中可以整除2391的数有3和797,而797是一个质数。 继续往下分析,输入更小的一组数:10和20,运行结果太多,不在此展示。其中运行后相同字符串间的距离有1077,2391,246,这些数都可以被3整除。 然后继续输入更小的一组数3和10,运行结果也太多,不在此展示。其中相同字符串的距离都可以被3整除。至此,我们可以推测密钥周期就是3 。 二、程序实现 1. 原理 首先,RC4是属于流密码体系中的一种。 RC4的原理比较简单,书上的描述也是很简洁的:用1—256个字节(8-2048位)的可变长度密钥初始化一个256字节的状态向量S,S 的元素记为S[0],S[1],…,S[255],从始至终置换后的S包含从0到255的所有8位数。对于加密和解密,字节K是从S的255个元素中按一种系统化的方式选出的一个元素生成的。每生成一个K的值,S中的元素个体就被重新置换一次。 有了以上的原理解释,以及书上的一些关键性算法伪代码描述,就可以很清晰的写出代码了。 2. 代码流程 1)初始化S 初始化s中的值,升序赋值为0—255,; 建立临时向量T,若k长度为256字节,直接将K赋给T。否则keylen256时 将k的值赋给T的前keylen个值,然后循环重复将T的其他值附满; 用T产生S的初始置换 void UpsetS(unsigned char S[], unsigned char key[]){ int j = 0; unsigned char temp; int n; for(int i = 0; i 256; i++){ n = j + (int)S[i] + (int)key[i]; j = n % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; } } 密钥流的生成以及生成密文或生成明文 从S[0]到S[255],对每个S[i],根据S的当前配置,将S[i]与S中的另一字节置换。当S[255]完成置换之后,操作从S[0]重复开始: 加密中,将k的值与明文的下一字节异或;解密中,将k的值与密文的下一字节异或。 void DataProcess(unsigned char S[], FILE *fp1, FILE *fp2){ int i, j; i = 0; j = 0; char ch = fgetc(fp1); while(ch != EOF){

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档