实验报告
实验五、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=时给出下列明文的密文:
(1)1111 1111 1111 1111 (2)0000 0000 0000 0000 (3)1111 0000 1111 0000 (4)1010 1010 1010 1010 (5)1101 0001 1111 0011
实验结果:
1平衡的Feistel网络
设x是待加密的明文,长度为2m比特(bit)。平衡的Feistel型分组密码的加密过程如下: (1)将明文x一分为二。设x=L0R0,L0是左边的m比特,R0是右边的m比特。 (2)对于1
(3)密文为y=RrLr.
平衡的Feistel型分组密码的解密过程是加密过程的逆运算。 实验程序如下: #include <> #define max 100 int i,m=8,r,j;
int x[max],y1[max],y2[max],k[max],F[max];
int f(int a,int b) { }
int w(int y1[],int y2[]) { } int main() {
printf(\输入明文:\\n\for (i=0;i<2*m;i++) {
printf(\输入密钥k:\\n\for (i=0;i scanf(\for (j=0;j<2*m;j++) { } if(j x[j]=y1[j]; if(a!=b) return 1; else return 0; else x[j+m]=y2[j]; return x[j]; } scanf(\ while(r--) { } for (i=0;i for(i=0;i for (i=0;i y1[i]=y2[i]; y2[i]=f(y1[i],F[i]); F[i]=f(y2[i],k[i]); if(i y1[i]=x[i]; else y2[i]=x[i+m]; printf(\printf(\结果为:\\n\for (i=0;i<2*m;i++) { } printf(\