📄 hanshu.cpp
字号:
#include"des.h"
#include"Table.h"
void Char_Binint (int bin[],char soc[])
{
int i,j,k,m,len;
len=strlen(soc);
int biaozhi[8]={0};
int bin_temp[100];
for(j=0;j<len;j++)
{
k=(int)soc[j];
if(k<0)
{
k=-k;
biaozhi[j]=1;
}
for(i=0;i<8;i++)
{
bin_temp[j*8+i]=k%2;
if(k==0)
break;
k=k/2;
}
if(i!=7)//不足八位的添0;
for(i;i<8;i++)
bin_temp[j*8+i]=0;
}
//更改循序
for(j=0;j<len;j++)
for(i=0;i<8;i++)
bin[j*8+i]=bin_temp[j*8+7-i];
for(i=0;i<8;i++)
if(biaozhi[i]==1)
{
//取反
for(int j=0;j<8;j++)
{
bin[i*8+j]=(bin[i*8+j]+1)%2;
}
//加一
for(int j=7;j>=0;j--)
if(bin[i*8+j]==0)
{
bin[i*8+j]=1;
for(int rem=j+1;rem<8;rem++)
bin[i*8+rem]=0;
break;
}
}
}
void Add_Check(int bin[])
{
int temp[100];
for(int i=0;i<56;i++)
temp[i]=bin[i];
for(int i=0;i<8;i++)
{ int sum=0;
for(int j=0;j<7;j++)
{
sum+=temp[i*7+j];
bin[i*8+j]=temp[i*7+j];
}
if(sum%2==0)
bin[(i+1)*8-1]=1;
else
bin[(i+1)*8-1]=0;
}
}
/*void Change_Noddle(int bin[])
{
int temp[100];
for(int i=0;i<64;i++)
temp[i]=bin[i];
for(int i=0;i<64;i++)
bin[i+1]=temp[i];
}*/
void Mutation(int biao[],int soc[],int des[],int num)
{
for(int i=0;i<num;i++)
des[i]=soc[biao[i]-1];
}
void Average(int Lbit[],int Rbit[],int soc[],int num)
{
for(int i=0;i<num/2;i++)
{
Lbit[i]=soc[i];
Rbit[i]=soc[i+num/2];
}
}
void L_Shift(int Lbit[],int Rbit[],int num)
{
int Lc[100],Rc[100];
for(int i=0;i<28;i++)
{
Lc[i]=Lbit[i];
Rc[i]=Rbit[i];
}
for(int i=0;i<28;i++)
{
Lbit[(i-num+28)%28]=Lc[i];
Rbit[(i-num+28)%28]=Rc[i];
}
}
void Unite(int Lbit[],int Rbit[],int key[],int num)
{
for(int i=0;i<num/2;i++)
{
key[i]=Lbit[i];
key[i+num/2]=Rbit[i];
}
}
void Yihou(int key[],int des[],int num)
{
for(int i=0;i<num;i++)
{
if(key[i]==1&&des[i]==0||key[i]==0&&des[i]==1)
des[i]=1;
else
des[i]=0;
}
}
void S_box(int key[],int des[])
{
int temp1[2],temp2[4];
int row,clo,temp3;
for(int i=0;i<8;i++)
{
int m=0,n=0;
for(int j=0;j<6;j++)
{
if(j==0||j==5)
{
temp1[m]=key[i*6+j];m++;
}
else
{
temp2[n]=key[i*6+j];n++;
}
}
row=temp1[1]+temp1[0]*2;
clo=temp2[0]*8+temp2[1]*4+temp2[2]*2+temp2[3];
temp3=S_Box[i][row][clo];
for(int k=3;k>=0;k--)
{
des[k+i*4]=temp3%2;
temp3=temp3/2;
}
}
}
void Int_Char(char rev[],int ming[])
{
int temp[8];
int i;
for( i=0;i<8;i++)
{
temp[i]=128*ming[i*8]+64*ming[i*8+1]+32*ming[8*i+2]+16*ming[8*i+3]+
8*ming[8*i+4]+4*ming[8*i+5]+2*ming[8*i+6]+ming[8*i+7];
rev[i]=temp[i];
}
rev[8]='\0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -