密码学应用与实践课程设计报告课程设计说明书之RC4.doc

密码学应用与实践课程设计报告课程设计说明书之RC4.doc

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

Harbin Institute of Technology at Weihai 密码学应用与实践 课程设计报告 专 业: 信息安全 班 级: 学 号: 姓 名: 伪随机数发生器LFSR 2 1.LFSR原理 2 2.设计思想 5 3.设计流程图 5 4.功能实现 5 1.生成随机数 5 2.生成序列 6 3.游程检测 7 5.总结 8 RC4加密与解密 9 1.RC4密码算法原理 9 2.设计思想 10 3.设计流程图 10 4.功能实现 11 1.打开文件 11 2.加密文件 11 3.解密文件 13 5.总结 15 源代码 15 伪随机数发生器LFSR 1.LFSR原理 在流密码加密中通常使用伪随机数发生器来产生密钥流,从而进行加密与解密,其结构如下图所示,而线性反馈移位寄存器(LFSR)是一个产生二进制位序列的机制。 图2 LFSR寄存器设计 2.移位寄存器 图3 序列产生方法 若想输出二进制序列,不但需要设计移位寄存器以及反馈系数,而且还需输入种子(seeds)来启动发生器,例如下左图所示LFSR,下右图即为输入种子(1000)后寄存器的移位及输出状态: 由上例还可看出LFSR具有周期性,若要尽可能输出较多的随机数即产生m-序列(T=2n-1),则需合理的设计寄存器的反馈系数,不同的反馈系数产生随机序列的周期不同。 图5 LFSR流程图 4.功能实现 1.生成随机数 随机数的生成考虑以下两个函数 函数一:int rand(void); 从rand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 函数二:void srand(unsigned seed); 参数seed是srand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看: 1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。 2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。 在这里我使用系统时间作为种子来初始化srand()的起始值,使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给srand函数oid CRC4Dlg::OnButtonCreatrn() //生成随机数 { int t,i,k; m_BRandNumber=; CString LastNo; srand(time(0)); //使用系统时间seed来初始化 t=1+rand()%1023; m_RandNumber=t; for(i=0;i10;i++) //转换成二进制 { k=t%2; t=t/2; RandNumber[i]=k;//注意顺序问题 LastNo.Format(%d,k); m_BRandNumber=LastNo+m_BRandNumber; } IsCreatRN=TRUE; UpdateData(FALSE); }void CRC4Dlg::OnButtonS() //生成序列 { if(IsCreatRN==FALSE) { AfxMessageBox(请先生成随机数!!!); return; } int i,j,m,n; CString MyNumber; for(i=0;i1023;i++) { m=RandNumber[0]; SeqRandNumber[i]=m; MyNumber.Format(%d,m); m_SeqRandNumber=m_SeqRandNumber+MyNumber; n=(RandNumber[9]+RandNumber[8]+RandNumber[5]+RandNumber[0])%2;//模加 for(j=0;j9;j++) { RandNumber[j]=RandNumber[j+1]; }//移位 RandNumber[j]=n;//移位寄存器的最高位根据特征多项式求出 } UpdateData(FALSE); IsCreatList=TRUE; m_SeqRandNumber=; }void CRC4Dlg::OnButtonT

文档评论(0)

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

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

1亿VIP精品文档

相关文档