⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hanshu.cpp

📁 试验DES对称密钥加密算法 可加密文件或终端的字符 密钥为7为的英文字母
💻 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 + -