您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 密码学实验-Feistel网络
实验报告实验五、Feistel网络实验目的:1.熟练掌握Feistel网络结构原理及实现;2.掌握Feistel网络结构的应用;实验内容:1、写出平衡Feistel网络结构加密运算的算法、程序设计。在此假定(1)明文的长度为2mbit;(2)函数f(x,y)=x+y(布尔加);(3)子密钥不变,都等于密钥k,长度为mbit;(4)执行循环次数为r。2、当m=16,r=3,k=11110000时给出下列明文的密文:(1)1111111111111111(2)0000000000000000(3)1111000011110000(4)1010101010101010(5)1101000111110011实验结果:1平衡的Feistel网络设x是待加密的明文,长度为2m比特(bit)。平衡的Feistel型分组密码的加密过程如下:(1)将明文x一分为二。设x=L0R0,L0是左边的m比特,R0是右边的m比特。(2)对于1ir,计算Li=Ri-1,Ri=Li-1+F(Ri-1,Ki),其中Li和Ri的长度都是m比特;F是一个加密函数,称为圈函数;Ki是由密钥k产生的长度为t比特的子密钥;+是按位模2加运算。(3)密文为y=RrLr.平衡的Feistel型分组密码的解密过程是加密过程的逆运算。实验程序如下:#includestdio.h#definemax100inti,m=8,r,j;intx[max],y1[max],y2[max],k[max],F[max];intf(inta,intb){if(a!=b)return1;elsereturn0;}intw(inty1[],inty2[]){for(j=0;j2*m;j++){if(jm)x[j]=y1[j];elsex[j+m]=y2[j];returnx[j];}}intmain(){printf(输入密钥k:\n);for(i=0;im;i++){scanf(%d,&k[i]);}printf(\n输入明文:\n);for(i=0;i2*m;i++){scanf(%d,&x[i]);}while(r--){for(i=0;im;i++){if(im)y1[i]=x[i];elsey2[i]=x[i+m];}for(i=0;im;i++){F[i]=f(y2[i],k[i]);}for(i=0;im;i++){y1[i]=y2[i];y2[i]=f(y1[i],F[i]);}w(y1,y2);}printf(\n);printf(结果为:\n);for(i=0;i2*m;i++){printf(%d,x[i]);}printf(\n);return0;}2.实验结果为:总结与分析:平衡的Feistel型分组密码的解密过程是加密过程的逆运算。在本次实验过程中不仅掌握了Feistel网络结构原理及实现,还掌握了Feistel网络结构的应用。熟悉了平衡Feistel密码的加密过程。并能运算出简单的Feistel密码。附件:Ch4多表(双表)古典密码的乘法加密运算的程序设计文件注:实验结束,将所有材料打包(文件采用统一格式:sn1-学号,以后的实验资料采用类似的文件格式)压缩并发送到:hzsx2004@yahoo.com.cn
本文标题:密码学实验-Feistel网络
链接地址:https://www.777doc.com/doc-6169334 .html