線性反馈与对偶移位寄存器的功能实现.docVIP

線性反馈与对偶移位寄存器的功能实现.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
線性反馈与对偶移位寄存器的功能实现

线性反馈与对偶移位寄存器的功能实现 091234 谢锦仪 一、实验目的: 该实验为验证性实验。 通过本实验,使学生切实理解线性反馈移位寄存器与对偶移位寄存器的工作原理,学会编写和运用两种移位寄存器“进动一拍”的程序,培养和锻炼学生对于密码学中各种基本“构造”的编程实现能力。 二、实验内容及完成情况: 1. 分别写出实现n-LFSR与 n-DSR(n为正整数)进动一拍的程序(旨在能“由寄存器的一个状态算出紧接着的下一个状态”),要求:寄存器状态的各分量自然地与相应数据存储区的各比特位一一对应,不允许仅1个状态分量就占据1个存储单元(字节、字或双字等)。 2. 基于上述程序完成以下工作:选定一个8次联接多项式,这时检验状态存储区自然形成的1字节二进制数是否与前出现者相同就可判定状态是否开始成圈(即进入周期性重复),据此编制 i) 分别计算LFSR与DSR在一个给定初态(由外部响应给出)下输出序列 ii) 求出LFSR或DSR之一状态图的程序。 三、实验要求: 1.对较低次数的联接多项式,程序计算结果须与手工推算一致; 2.抓图显示“输出序列”与“状态图”(附页),不能出现明显错误。 四、结果: 1、LFSR 2、DSR 五、实验体会: 这次实验有很大的难度,尤其是对其中移位的操作难倒了不少人。并且看了老师给的程序后理解不是很深,看了很长时间后才有所了解,后来经过复习以前的课程对LFSR和DSR有了更深层次的理解之后终于明白了程序改如何编写了。 总的来说,这次实验不但是我对LFSR和DSR两种古典密码有了很好的理解,而且也是我对C语言编程中的位运算也熟悉了不少,相信在以后的工作中会给我带来很大的便利。 六、思考题: 为什么“检验状态存储区自然形成的二进制数是否与前出现者相同就可判定状态是否开始成圈(即进入周期性重复)”? 答:因为每个状态都有唯一的前一拍状态,对应的所有的状态应该是一一连接的(不一定都在一条线上)。所以如果出现了2个一样的状态,那么后续的对应状态一定相同。 附录 #includestdio.h #includestring.h #includestdlib.h unsigned char *DSR_go(unsigned char *pzt,unsigned char *pjg,unsigned char count) { unsigned char t;int a=128,b; t=pzt[0]; pzt[0]=pzt[0]1; t=(8-count); b=ta; if(b==128) pzt[0]^=pjg[0]; return(pzt); } unsigned char *LFSR_go(unsigned char *pzt,unsigned char *pjg) { unsigned char t=0; int c=0,i,m=0;t=pzt[0]1; for(i=0;i8;i++) { if(((pjg[0]i)128)==128) { if(((pzt[0]i)128)==128) m++; } } if(m%2==0) t=t; else t|=1; pzt[0]=t; return (pzt); } void d_to_b(unsigned char n ,unsigned char count) { int a=128,b,i; n=(8-count); for(i=0;icount;i++) { b=na; if (b==128) printf(1); else printf(0); n=n1; } } b_to_d(int n) { int a=0,i; char c; for (i=0;in+1;i++) {c=getchar(); if(c==1) {a=a1;a++;} else a=a1; } return a; } void main() {int count,choose_c=0,a=1,i,k;int b; unsigned char *p,pzt[32],pjg[32],xchg1,tihuan[100]; printf(请输入n值:\n); scanf(%d,count); for(i=1;icount+1;i++) { choose_c=choose_c+a; a*=2; } printf(请输入初始状态:\n); pzt[0]=b_to_d(count); x

文档评论(0)

sd47f8cI + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档