DES一轮加密(C语言)
来源:互联网 发布:中国移动有什么软件 编辑:程序博客网 时间:2024/05/18 02:53
DES一轮加密算法,假设8个S盒一样,都为S1盒。输出每一步
的结果。
已知R0=00000000 11111111 00000110 10000011,
子密钥K1=00111101 10001111 11001101 00110111 00111111 00000110
实现E盒扩展、与轮密钥异或加、S盒代换(8个一样的S盒,都为S1盒)和P盒置换。
#include
#include
intR0[32]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,1};
intK1[48]={0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0};
intE[48];
intS[4][16]={{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},
{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},
{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},
{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}};
intP[32]={16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,
8,24,14,32,27,3,9,19,13,30,6,22,11,4,25};
int i,j;
intR1[48],R2[32],R3[32];
int kuozhan_E()
{
int a=1,b=2,c=3,d=4;
intcount0=1;
intcount1=1;
for(i=0;i<48;i=i+6)
{
E=R0[(4*count0+27)2];
count0++;
}
for(i=5;i<48;i=i+6)
{
E=R0[(4*count1+32)2];
count1++;
}
for(i=0;i<32;i++)
{
if(i%4==0)
{
E[a]=R0;
a=a+6;
}
else if(i%4==1)
{
E=R0;
b=b+6;
}
else if(i%4==2)
{
E[c]=R0;
c=c+6;
}
else if(i%4==3)
{
E[d]=R0;
d=d+6;
}
}
for(i=0;i<48;i++)
{
printf("%d",E);
if(i%6==5)
printf("n");
}
}
int yihuo()
{
for(j=0;j<48;j++)
{
R1[j]=E[j]^K1[j];
的结果。
已知R0=00000000 11111111 00000110 10000011,
子密钥K1=00111101 10001111 11001101 00110111 00111111 00000110
实现E盒扩展、与轮密钥异或加、S盒代换(8个一样的S盒,都为S1盒)和P盒置换。
#include
#include
int kuozhan_E()
{
}
int yihuo()