📄 sdes.cpp
字号:
#include "stdio.h"
#include "iostream"
using namespace std;
void main(){
int i,temp,temp1,a[8],b[10],k[10],k1[8],k2[8],t[8],t1[8],t3[8],t2[8],p4[4],m[8];
int p10[10]={3,5,2,7,4,10,1,9,8,6};
int p8[8]={6,3,7,4,8,5,10,9};
int ip[8]={2,6,3,1,4,8,5,7};
int ip1[8]={4,1,3,5,7,2,8,6};
int ep[8]={4,1,2,3,2,3,4,1};
int s0[4][4]={{1,0,3,2},{3,2,1,0},{0,2,1,3},{3,1,3,2}};
int s1[4][4]={{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}};
cout<<"\n\n请输入密钥(10位二进制数):";
for(i=0;i<10;i++)
scanf("%1d",&k[i]);
//下面是算K1与K2
for(i=0;i<10;i++)
t[i]=k[p10[i]-1];
cout<<endl;
//k1
temp=t[0];
for(i=0;i<4;i++)
t[i]=t[i+1];
t[4]=temp;
temp=t[5];
for(i=5;i<9;i++)
t[i]=t[i+1];
t[9]=temp;
for(i=0;i<10;i++)
b[i]=t[i];
for(i=0;i<8;i++)
k1[i]=b[p8[i]-1];
cout<<endl;
//k2
temp=t[0];
temp1=t[1];
for(i=0;i<3;i++)
t[i]=t[i+2];
t[3]=temp;
t[4]=temp1;
temp=t[5];
temp1=t[6];
for(i=5;i<8;i++)
t[i]=t[i+2];
t[8]=temp;
t[9]=temp1;
for(i=0;i<8;i++)
k2[i]=t[p8[i]-1];
//选择加密或者解密
int choice;
cout<<"请选择要使用的功能\n\n加密1\n\n解密2\n\n";
cin>>choice;
int *kk1=new int;
int *kk2=new int;
if(choice==1)
{
kk2=k1;
kk1=k2;
cout<<"\n请输入要加密的明文(8位二进制数):";
for(i=0;i<8;i++)
scanf("%1d",&a[i]);
}
else
{
kk2=k2;
kk1=k1;
cout<<"\n请输入要解密的密文(8位二进制数):";
for(i=0;i<8;i++)
scanf("%1d",&a[i]);
}
//下面是算fk加密解密过程
//ip
for(i=0;i<8;i++)
{
t[i]=a[ip[i]-1];
t3[i]=t[i];
}
//ep1
for(i=0;i<8;i++)
t1[i]=t[ep[i]+4-1];
//m+
for(i=0;i<8;i++)
t1[i]=(t1[i]^kk2[i]);
//s0,s1
temp=s0[t1[0]*2+t1[3]][t1[1]*2+t1[2]];
temp1=s1[t1[4]*2+t1[7]][t1[5]*2+t1[6]];
//p4
p4[0]=temp%2;
p4[1]=temp1%2;
p4[2]=temp1/2;
p4[3]=temp/2;
//sw
for(i=0;i<4;i++)
t2[i+4]=(t3[i]^p4[i]);
for(i=0;i<4;i++)
t2[i]=t3[i+4];
for(i=0;i<8;i++)
t3[i]=t2[i];
//ep2
for(i=0;i<8;i++)
t1[i]=t2[ep[i]+4-1];
//m+
for(i=0;i<8;i++)
t1[i]=(t1[i]^kk1[i]);
//s0,s1
temp=s0[t1[0]*2+t1[3]][t1[1]*2+t1[2]];
temp1=s1[t1[4]*2+t1[7]][t1[5]*2+t1[6]];
//p4
p4[0]=temp%2;
p4[1]=temp1%2;
p4[2]=temp1/2;
p4[3]=temp/2;
for(i=0;i<4;i++)
t2[i]=(t3[i]^p4[i]);
//ip-1
for(i=0;i<8;i++)
m[i]=t2[ip1[i]-1];
if(choice==1)
cout<<"\n\n加密后的密文是 : ";
else
cout<<"\n\n解密后的明文是 : ";
for(i=0;i<8;i++)
cout<<m[i];
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -