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

📄 seeddes.c

📁 DSP开发可以用来看外设情况的程序
💻 C
字号:

/********************************************************************/
/* FileName: SeedDes.c												*/
/* Function: Realize Signal DES and Triple DES algorithm			*/
/********************************************************************/

/* Define data variabls */
Uint16 PlainText[4] = {0x0000};
Uint16 CypherText[4] = {0x0000};
Uint16 Key[4] = {0x0001,0x0002,0x0003,0x0004}; 
Uint16 K_Data[4] = {0x0000};
Uint32 C_Data[17] = {0x0};
Uint32 D_Data[18] = {0x0};
Uint32 CD_Data[2] = {0x0};
Uint32 SubKey[16][2] = {};


/* Define PC-1 transition data array */
Uint16 PC1Data[56] = {
	57, 49, 41, 33, 25, 17,  9,
	 1, 58, 50, 42, 34, 26, 18,
	10,  2, 59, 51, 43, 35, 27,
	19, 11,  3, 60, 52, 44, 36,
	63, 55, 47, 39, 31, 23, 15,
	 7, 62, 54, 46, 38, 30, 22,
	14,  6, 61, 53, 45, 37, 29,
	21, 13,  5, 28, 20, 12,  4}

/* Define PC-2 transition data array */
Uint16 PC2Data[48] ={
	14, 17, 11, 24, 1 , 5 ,
	 3, 28, 15,  6, 21, 10,
	23, 19, 12,  4, 26,  8,
	16,  7, 27, 20, 13,  2,
	41, 52, 31, 37, 47, 55,
	30, 40, 51, 45, 33, 48,
	44, 49, 39, 56, 34, 53,
	46, 42, 50, 36, 29, 32}
	
Void Des_Key(Uint16 *Key )
{
	Uint16 i,j,k,l,m,n,Temp;
	Uint32 LongTemp;
	
	/* Get permuted data array */
	for(i=0;i<56;i++)
	{
	    j = PC1Data[i]/16;	// Word number
	    k = PC1Data[i]%16;	// Bit number 
	    m = i/16;
	    n = i%16;
		Temp = (Key[j]>>k)&0x0001;
		K_Data[m] |= (Temp<<n);	
	}
	
	/* Get C[i] and D[i] (i from 0 to 16) data array */
	D_Data[0] |= K_Data[0];					// Get D0
	D_Data[0] |= (K_Data[1]&0x0FFF<<16);
	
	C_Data[0] |= ((K_Data[1]&0xF000)>>12);	// Get C0
	C_Data[0] |= ((K_Data[2]&0x0FFF)<<4);
	C_Data[0] |= ((K_Data[2]&0xF000)<<16);
	C_Data[0] |= ((K_Data[3]&0x00FF)<<20);
	
	for(i=1; i<=16; i++)
	{
	    if((i==1)||(i==2)||(i==9)||(i==16))	// If iteration number is 1,2,9,16
	    {									// left shift 1 bit
	 		D_Data[i] = D_Data[i-1]<<1;
	 		D_Data[i] |= D_Data[i-1]>>23;
	 	}	
	 	else								// If iteration number is not 1,2,9,16
	 	{									// left shift 2 bits
	 		D_Data[i] = D_Data[i-1]<<2;
	 		D_Data[i] |= D_Data[i-1]>>22;
	 	}
	}
	
	/* Form the data array CD[n] (n from 1 to 16) */
	for(i=1; i<+16; i++)
	{
		CD_Data[0] = D_Data[i];
		CD_Data[0] |= (C_Data[i]&0xF)<<28;
		CD_Data[1] = (C_Data[i]&0xFFFFFFF0)>>4;
		for(j=0 ; j<=48; j++)
		{
		    k = PC2Data/32;
		    l = PC2Data%32;
		    m = j/32;
		    n = j%32;
		    LongTemp = (CD_Data[k]>>j)&0x0001;
			SubKey[i][m] |= (LongTemp<<n);	 
		}
	}	
}

⌨️ 快捷键说明

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