- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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){
您可能关注的文档
最近下载
- 部编版五年级上册语文分层作业设计案例&第4单元(课课练5课时)含答案.pdf
- 2023-2024学年北京石景山区九年级上学期期末考试物理试题+答案解析.pdf VIP
- 青岛版小学科学四年级上册实验教学计划.doc
- 条件概率与全概率公式.docx VIP
- 镁合金表面微弧氧化用电解质溶液及黑色涂层的制备方法.pdf VIP
- 招贴海报设计教案.doc VIP
- 教科版一年级科学上册2.4《气味告诉我们》课件.pptx
- 江苏-J10687-2006(江苏省)住宅工程质量通病控制标准完整版.doc
- 前台绩效考核表(绩效考核+前台接待).pdf VIP
- NY-T 1935-2010 食用菌栽培基质质量安全要求.pdf
文档评论(0)