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

📄 newddes.c.bak

📁 89c51des算法c语言源代码
💻 BAK
📖 第 1 页 / 共 2 页
字号:

/**********************************************************************/
/*                                                                    */
/*      HIGH LEVEL FUNCTION.  END  //COM                              */
/*                                                                    */
/**********************************************************************/
/*===========================*/
#pragma OPTIMIZE(5,SIZE)
#pragma LARGE 
#pragma CD PW(76)
/*---------------------------*/
/*---------------------------*/
#include <reg52.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <absacc.h>
#include <intrins.h>
/*------------------------*/
//
//
extern bit b_Temp1 ,b_Temp2 ,b_Temp3 ,b_Temp4  ,b_Temp5  ,b_Temp6 ,b_Temp7 ,b_Temp8 ; 
extern bit b_Temp9 ,b_Temp10 ,b_Temp11,b_Temp12 ,b_Temp13 ,b_Temp14  ,b_Temp15 ,b_Temp16 ,b_Temp17;  
extern bit b_Temp18 ,b_Temp19 ,b_Temp20 ,b_Temp21 ,b_Temp22  ,b_Temp23  ,b_Temp24 ,b_Temp25 ,b_Temp26 ; 
extern bit b_Temp27 ,b_Temp28 ,b_Temp29 ,b_Temp30 ,b_Temp31  ,b_Temp32  ,b_Temp33 ,b_Temp34 ,b_Temp35 ; 
extern bit b_Temp36 ,b_Temp37 ,b_Temp38 ,b_Temp39 ,b_Temp40  ,b_Temp41  ,b_Temp42 ,b_Temp43 ,b_Temp44  ;
extern bit b_Temp45 ,b_Temp46 ,b_Temp47 ,b_Temp48 ,b_Temp49  ,b_Temp50  ,b_Temp51 ,b_Temp52 ,b_Temp53  ;
extern bit b_Temp54 ,b_Temp55 ,b_Temp56 ,b_Temp57 ,b_Temp58  ,b_Temp59  ,b_Temp60 ,b_Temp61 ,b_Temp62  ;
extern bit b_Temp63,b_Temp64; 
extern bit b_Bit64 ,b_Bit1 ,b_Bit2 ,b_Bit3 ,b_Bit4  ,b_Bit5  ,b_Bit6 ,b_Bit7 ,b_Bit8 ; 
extern bit b_Bit9 ,b_Bit10 ,b_Bit11,b_Bit12 ,b_Bit13 ,b_Bit14  ,b_Bit15 ,b_Bit16 ,b_Bit17 ; 
extern bit b_Bit18 ,b_Bit19 ,b_Bit20 ,b_Bit21 ,b_Bit22  ,b_Bit23  ,b_Bit24 ,b_Bit25 ,b_Bit26 ; 
extern bit b_Bit27 ,b_Bit28 ,b_Bit29 ,b_Bit30 ,b_Bit31  ,b_Bit32  ,b_Bit33 ,b_Bit34 ,b_Bit35 ; 
extern bit b_Bit36 ,b_Bit37 ,b_Bit38 ,b_Bit39 ,b_Bit40  ,b_Bit41  ,b_Bit42 ,b_Bit43 ,b_Bit44 ; 
extern bit b_Bit45 ,b_Bit46 ,b_Bit47 ,b_Bit48 ,b_Bit49  ,b_Bit50  ,b_Bit51 ,b_Bit52 ,b_Bit53  ;
extern bit b_Bit54 ,b_Bit55 ,b_Bit56 ,b_Bit57 ,b_Bit58  ,b_Bit59  ,b_Bit60 ,b_Bit61 ,b_Bit62  ;
extern bit b_Bit63 ;

extern data unsigned char p_cCharToBit[8],p_cBitToChar[8];
extern idata unsigned char p_cChildKey[96];
extern idata unsigned char p_cChildKey[96];
extern data unsigned char p_cRightInitData[4],p_cLeftInitData[4];
extern data unsigned char p_cExpaindPermutation[6];
extern data unsigned char p_cCompressPermutation[4];
	code unsigned char si[8][64] =
	{
			{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},

		       {15,1 ,8 ,14,6 ,11,3 ,4 ,9 ,7 ,2 ,13,12,0 ,5 ,10,
			3, 13,4 ,7 ,15,2 ,8 ,14,12,0 ,1 ,10,6 ,9 ,11,5 ,
			0, 14,7 ,11,10,4 ,13,1 ,5 ,8 ,12,6 ,9 ,3 ,2 ,15,
			13,8 ,10,1 ,3 ,15,4 ,2 ,11,6 ,7 ,12,0 ,5 ,14,9 },

		       {10,0 ,9 ,14,6 ,3 ,15,5 ,1 ,13,12,7 ,11,4 ,2 ,8 ,
			13,7 ,0 ,9 ,3 ,4 ,6 ,10,2 ,8 ,5 ,14,12,11,15,1 ,
			13,6 ,4 ,9 ,8 ,15,3 ,0 ,11,1 ,2 ,12,5 ,10,14,7 ,
			1 ,10,13,0 ,6 ,9 ,8 ,7 ,4 ,15,14,3 ,11,5 ,2 ,12},

		       {7 ,13,14,3 ,0 ,6 ,9 ,10,1 ,2 ,8 ,5 ,11,12,4 ,15,
			13,8 ,11,5 ,6 ,15,0 ,3 ,4 ,7 ,2 ,12,1 ,10,14,9 ,
			10,6 ,9 ,0 ,12,11,7 ,13,15,1 ,3 ,14,5 ,2 ,8 ,4 ,
			3 ,15,0 ,6 ,10,1 ,13,8 ,9 ,4 ,5 ,11,12,7 ,2 ,14},

		       {2 ,12,4 ,1 ,7 ,10,11,6 ,8 ,5 ,3 ,15,13,0 ,14,9 ,
			14,11,2 ,12,4 ,7 ,13,1 ,5 ,0 ,15,10,3 ,9 ,8 ,6,
			4 ,2 ,1 ,11,10,13,7 ,8 ,15,9 ,12,5 ,6 ,3 ,0 ,14,
			11,8 ,12,7 ,1 ,14,2 ,13,6 ,15,0 ,9 ,10,4 ,5 ,3 },

		       {12,1 ,10,15,9 ,2 ,6 ,8 ,0 ,13,3 ,4 ,14,7 ,5 ,11,
			10,15,4 ,2 ,7 ,12,9 ,5 ,6 ,1 ,13,14,0 ,11,3 ,8 ,
			9 ,14,15,5 ,2 ,8 ,12,3 ,7 ,0 ,4 ,10,1 ,13,11,6 ,
			4 ,3 ,2 ,12,9 ,5 ,15,10,11,14,1 ,7 ,6 ,0 ,8 ,13},

		       {4 ,11,2 ,14,15,0 ,8 ,13,3 ,12,9 ,7 ,5 ,10,6 ,1 ,
			13,0 ,11,7 ,4 ,9 ,1 ,10,14,3 ,5 ,12,2 ,15,8 ,6 ,
			1 ,4 ,11,13,12,3 ,7 ,14,10,15,6 ,8 ,0 ,5 ,9 ,2 ,
			6 ,11,13,8 ,1 ,4 ,10,7 ,9 ,5 ,0 ,15,14,2 ,3 ,12},

		       {13,2 ,8 ,4 ,6 ,15,11,1 ,10,9 ,3 ,14,5 ,0 ,12,7 ,
			1 ,15,13,8 ,10,3 ,7 ,4 ,12,5 ,6 ,11,0 ,14,9 ,2 ,
			7 ,11,4 ,1 ,9 ,12,14,2 ,0 ,6 ,10,13,15,3 ,5 ,8 ,
			2 ,1 ,14,7 ,4 ,10,8 ,13,15,12,9 ,0 ,3 ,5 ,6 ,11}
	};  ////////s盒,用于代替运算

	code unsigned char sht[] = 	{
			1 ,1 ,2 ,2 ,2 ,2 ,2 ,2 , 1 ,2 ,2 ,2 ,2 ,2 ,2 ,1
			};



/**************  DES algorithm ****************/
//****************************    des    **********************************
unsigned char Des(unsigned char *Key,unsigned char *Source, unsigned char *result,unsigned char IsEncrypt);
unsigned char DesEncrypt(unsigned char *Key,unsigned char *Source, unsigned char *result);
unsigned char DesDecrypt(unsigned char *Key,unsigned char *Source, unsigned char *result);
void InitPermutation(unsigned char *Source,unsigned char *p_cLInitData,unsigned char *p_cRInitData);
void GenerateChildKey(unsigned char *Key,unsigned char *Childkey);
void ExpandPermutation(unsigned char *p_cExpaindPermutation,unsigned char *p_cRightInitData);
void CompressPermutation(unsigned char *p_cCompressPermutation,unsigned char *p_cExpaindPermutation);
void  StraigthPermutation(unsigned char *p_cCompressPermutation);
void FinalPermutation(unsigned char *result,unsigned char *p_cRightInitData,unsigned char *p_cLeftInitData);

//**************************************************************************
/*
void send_bytes(unsigned char *sd,unsigned char len)
{
	unsigned char record;
	for(record=0;record<len;record++)
	{  
	     TI=0;           
	     SBUF=sd[record];
	     while(!TI);
	}	


	 
}
*/
/////////////////////////////////////////////////////////////////////////////////
unsigned char DesEncrypt(unsigned char *Key,unsigned char *Source, unsigned char *result)
{
   return Des(Key,Source,result,1);
}

unsigned char DesDecrypt(unsigned char *Key,unsigned char *Source, unsigned char *result)
{
        return Des(Key,Source,result,0);
}
unsigned char Des(unsigned char *Key,unsigned char *Source, unsigned char *result,unsigned char IsEncrypt)
{
	unsigned char data i,j,k;
	//	/**************产生子密钥*****************
	GenerateChildKey(Key,p_cChildKey);

//	/**************初试置换*******************
	InitPermutation(Source,p_cLeftInitData,p_cRightInitData);

        for(k=0;k<16;k++)
	{

            ExpandPermutation(p_cExpaindPermutation,p_cRightInitData);
            if(IsEncrypt)j=k;
            else j=15-k;
            for(i=0;i<6;i++)p_cExpaindPermutation[i]=p_cExpaindPermutation[i]^p_cChildKey[j*6+i];
              
            CompressPermutation(p_cCompressPermutation,p_cExpaindPermutation);
	      
	    StraigthPermutation(p_cCompressPermutation);
	       
	    for(i=0;i<4;i++)p_cCompressPermutation[i]^=p_cLeftInitData[i];
	       
	    for(i=0;i<4;i++)
	    {
		   p_cLeftInitData[i]=p_cRightInitData[i];
		   p_cRightInitData[i]=p_cCompressPermutation[i];
	    }

        }

	FinalPermutation(result,p_cRightInitData,p_cLeftInitData);
	return 0;
}

void InitPermutation(unsigned char *Source,unsigned char *p_cLInitData,unsigned char *p_cRInitData)
{
	  memcpy(p_cCharToBit,Source,8);
	  b_Bit1=b_Temp58;
	  b_Bit2=b_Temp50;
	  b_Bit3=b_Temp42;
	  b_Bit4=b_Temp34;	
	  b_Bit5=b_Temp26;
	  b_Bit6=b_Temp18;
	  b_Bit7=b_Temp10;
	  b_Bit8=b_Temp2;

	  b_Bit9=b_Temp60;	  
	  b_Bit10=b_Temp52;
	  b_Bit11=b_Temp44;
	  b_Bit12=b_Temp36;
	  b_Bit13=b_Temp28;
	  b_Bit14=b_Temp20;
	  b_Bit15=b_Temp12;
	  b_Bit16=b_Temp4;

	  b_Bit17=b_Temp62;
	  b_Bit18=b_Temp54;
	  b_Bit19=b_Temp46;
	  b_Bit20=b_Temp38;
	  b_Bit21=b_Temp30;
	  b_Bit22=b_Temp22;
	  b_Bit23=b_Temp14;
	  b_Bit24=b_Temp6;

	  b_Bit25=b_Temp64;
	  b_Bit26=b_Temp56;
	  b_Bit27=b_Temp48;
	  b_Bit28=b_Temp40;
	  b_Bit29=b_Temp32;
	  b_Bit30=b_Temp24;
	  b_Bit31=b_Temp16;
	  b_Bit32=b_Temp8;
	  
	  b_Bit33=b_Temp57;
	  b_Bit34=b_Temp49;
	  b_Bit35=b_Temp41;
	  b_Bit36=b_Temp33;
	  b_Bit37=b_Temp25;
	  b_Bit38=b_Temp17;
	  b_Bit39=b_Temp9;
	  b_Bit40=b_Temp1;

	  b_Bit41=b_Temp59;
	  b_Bit42=b_Temp51;
	  b_Bit43=b_Temp43;
	  b_Bit44=b_Temp35;
	  b_Bit45=b_Temp27;
	  b_Bit46=b_Temp19;
	  b_Bit47=b_Temp11;
	  b_Bit48=b_Temp3;

	  b_Bit49=b_Temp61;
	  b_Bit50=b_Temp53;
	  b_Bit51=b_Temp45;
	  b_Bit52=b_Temp37;
	  b_Bit53=b_Temp29;
	  b_Bit54=b_Temp21;
	  b_Bit55=b_Temp13;
	  b_Bit56=b_Temp5;

	  b_Bit57=b_Temp63;
	  b_Bit58=b_Temp55;
	  b_Bit59=b_Temp47;
	  b_Bit60=b_Temp39;
	  b_Bit61=b_Temp31;
	  b_Bit62=b_Temp23;
	  b_Bit63=b_Temp15;
	  b_Bit64=b_Temp7;

	  memcpy(p_cLInitData,p_cBitToChar,4);
	  memcpy(p_cRInitData,&p_cBitToChar[4],4);
}

void GenerateChildKey(unsigned char *Key,unsigned char *Childkey)
{
	  data unsigned char i,k;
/*******************************密钥置换*************************************/
	  memcpy(p_cCharToBit,Key,8);

      b_Bit1=b_Temp57;
	  b_Bit2=b_Temp49;
	  b_Bit3=b_Temp41;
	  b_Bit4=b_Temp33;
	  b_Bit5=b_Temp25;
	  b_Bit6=b_Temp17;
	  b_Bit7=b_Temp9;

	  b_Bit8=b_Temp1;
	  b_Bit9=b_Temp58;
	  b_Bit10=b_Temp50;
	  b_Bit11=b_Temp42;
	  b_Bit12=b_Temp34;
	  b_Bit13=b_Temp26;
	  b_Bit14=b_Temp18;

//////row 2
	  b_Bit15=b_Temp10;
	  b_Bit16=b_Temp2;
	  b_Bit17=b_Temp59;
	  b_Bit18=b_Temp51;
	  b_Bit19=b_Temp43;
	  b_Bit20=b_Temp35;
	  b_Bit21=b_Temp27;

	  b_Bit22=b_Temp19;
	  b_Bit23=b_Temp11;
	  b_Bit24=b_Temp3;
	  b_Bit25=b_Temp60;
	  b_Bit26=b_Temp52;
	  b_Bit27=b_Temp44;
	  b_Bit28=b_Temp36;

//////row 3
	  b_Bit29=b_Temp63;
	  b_Bit30=b_Temp55;
	  b_Bit31=b_Temp47;
	  b_Bit32=b_Temp39;
	  b_Bit33=b_Temp31;
	  b_Bit34=b_Temp23;
	  b_Bit35=b_Temp15;

	  b_Bit36=b_Temp7;
	  b_Bit37=b_Temp62;
	  b_Bit38=b_Temp54;
	  b_Bit39=b_Temp46;
	  b_Bit40=b_Temp38;
	  b_Bit41=b_Temp30;
	  b_Bit42=b_Temp22;

//////row 4
	  b_Bit43=b_Temp14;
	  b_Bit44=b_Temp6;
	  b_Bit45=b_Temp61;
	  b_Bit46=b_Temp53;
	  b_Bit47=b_Temp45;
	  b_Bit48=b_Temp37;
	  b_Bit49=b_Temp29;

	  b_Bit50=b_Temp21;
	  b_Bit51=b_Temp13;
	  b_Bit52=b_Temp5;
	  b_Bit53=b_Temp28;
	  b_Bit54=b_Temp20;
	  b_Bit55=b_Temp12;
	  b_Bit56=b_Temp4;
/*******************************************************************/
/**************************16轮密钥移动*****************************/
	for(k=0;k<16;k++)
	{
		for(i=0;i<sht[k];i++)
		{		
       /************28*2个位左移移位****************************/	
    		b_Bit60=b_Bit1;
			b_Bit1=b_Bit2;
			b_Bit2=b_Bit3;
			b_Bit3=b_Bit4;
			b_Bit4=b_Bit5;
			b_Bit5=b_Bit6;
			b_Bit6=b_Bit7;
			b_Bit7=b_Bit8;
			b_Bit8=b_Bit9;
			b_Bit9=b_Bit10;
			b_Bit10=b_Bit11;
			b_Bit11=b_Bit12;
			b_Bit12=b_Bit13;
			b_Bit13=b_Bit14;
			b_Bit14=b_Bit15;
			b_Bit15=b_Bit16;
			b_Bit16=b_Bit17;
			b_Bit17=b_Bit18;
			b_Bit18=b_Bit19;
			b_Bit19=b_Bit20;
			b_Bit20=b_Bit21;
			b_Bit21=b_Bit22;
			b_Bit22=b_Bit23;
			b_Bit23=b_Bit24;
			b_Bit24=b_Bit25;
			b_Bit25=b_Bit26;
			b_Bit26=b_Bit27;
			b_Bit27=b_Bit28;
			b_Bit28=b_Bit60;



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -