📄 seeddes.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 + -