#include "des.h"
#include <stdint.h>
/************byte2bit(change 64byte to 64bit-8byte)(begin)********************/
void byte2bit(unsigned char byte[64] , unsigned char bit[8])
{
int i = 0 ;
/*byte1*/
for(i = 0;i < 8;i++)
{
if(byte[0] == 0x1) bit[0] = bit[0] | 0x80 ;
else bit[0] = bit[0] & 0x7f ;
if(byte[1] == 0x1) bit[0] = bit[0] | 0x40 ;
else bit[0] = bit[0] & 0xbf ;
if(byte[2] == 0x1) bit[0] = bit[0] | 0x20 ;
else bit[0] = bit[0] & 0xdf ;
if(byte[3] == 0x1) bit[0] = bit[0] | 0x10 ;
else bit[0] = bit[0] & 0xef ;
if(byte[4] == 0x1) bit[0] = bit[0] | 0x08 ;
else bit[0] = bit[0] & 0xf7 ;
if(byte[5] == 0x1) bit[0] = bit[0] | 0x04 ;
else bit[0] = bit[0] & 0xfb ;
if(byte[6] == 0x1) bit[0] = bit[0] | 0x02 ;
else bit[0] = bit[0] & 0xfd ;
if(byte[7] == 0x1) bit[0] = bit[0] | 0x01 ;
else bit[0] = bit[0] & 0xfe ;
}
/*byte2*/
for(i = 8;i < 16;i++)
{
if(byte[8] == 0x1) bit[1] = bit[1] | 0x80 ;
else bit[1] = bit[1] & 0x7f ;
if(byte[9] == 0x1) bit[1] = bit[1] | 0x40 ;
else bit[1] = bit[1] & 0xbf ;
if(byte[10] == 0x1) bit[1] = bit[1] | 0x20 ;
else bit[1] = bit[1] & 0xdf ;
if(byte[11] == 0x1) bit[1] = bit[1] | 0x10 ;
else bit[1] = bit[1] & 0xef ;
if(byte[12] == 0x1) bit[1] = bit[1] | 0x08 ;
else bit[1] = bit[1] & 0xf7 ;
if(byte[13] == 0x1) bit[1] = bit[1] | 0x04 ;
else bit[1] = bit[1] & 0xfb ;
if(byte[14] == 0x1) bit[1] = bit[1] | 0x02 ;
else bit[1] = bit[1] & 0xfd ;
if(byte[15] == 0x1) bit[1] = bit[1] | 0x01 ;
else bit[1] = bit[1] & 0xfe ;
}
/*byte3*/
for(i = 16;i < 24 ;i++)
{
if(byte[16] == 0x1) bit[2] = bit[2] | 0x80 ;
else bit[2] = bit[2] & 0x7f ;
if(byte[17] == 0x1) bit[2] = bit[2] | 0x40 ;
else bit[2] = bit[2] & 0xbf ;
if(byte[18] == 0x1) bit[2] = bit[2] | 0x20 ;
else bit[2] = bit[2] & 0xdf ;
if(byte[19] == 0x1) bit[2] = bit[2] | 0x10 ;
else bit[2] = bit[2] & 0xef ;
if(byte[20] == 0x1) bit[2] = bit[2] | 0x08 ;
else bit[2] = bit[2] & 0xf7 ;
if(byte[21] == 0x1) bit[2] = bit[2] | 0x04 ;
else bit[2] = bit[2] & 0xfb ;
if(byte[22] == 0x1) bit[2] = bit[2] | 0x02 ;
else bit[2] = bit[2] & 0xfd ;
if(byte[23] == 0x1) bit[2] = bit[2] | 0x01 ;
else bit[2] = bit[2] & 0xfe ;
}
/*byte4*/
for(i = 24;i < 32 ;i++)
{
if(byte[24] == 0x1) bit[3] = bit[3] | 0x80 ;
else bit[3] = bit[3] & 0x7f ;
if(byte[25] == 0x1) bit[3] = bit[3] | 0x40 ;
else bit[3] = bit[3] & 0xbf ;
if(byte[26] == 0x1) bit[3] = bit[3] | 0x20 ;
else bit[3] = bit[3] & 0xdf ;
if(byte[27] == 0x1) bit[3] = bit[3] | 0x10 ;
else bit[3] = bit[3] & 0xef ;
if(byte[28] == 0x1) bit[3] = bit[3] | 0x08 ;
else bit[3] = bit[3] & 0xf7 ;
if(byte[29] == 0x1) bit[3] = bit[3] | 0x04 ;
else bit[3] = bit[3] & 0xfb ;
if(byte[30] == 0x1) bit[3] = bit[3] | 0x02 ;
else bit[3] = bit[3] & 0xfd ;
if(byte[31] == 0x1) bit[3] = bit[3] | 0x01 ;
else bit[3] = bit[3] & 0xfe ;
}
/*byte5*/
for(i = 32;i < 40 ;i++)
{
if(byte[32] == 0x1) bit[4] = bit[4] | 0x80 ;
else bit[4] = bit[4] & 0x7f ;
if(byte[33] == 0x1) bit[4] = bit[4] | 0x40 ;
else bit[4] = bit[4] & 0xbf ;
if(byte[34] == 0x1) bit[4] = bit[4] | 0x20 ;
else bit[4] = bit[4] & 0xdf ;
if(byte[35] == 0x1) bit[4] = bit[4] | 0x10 ;
else bit[4] = bit[4] & 0xef ;
if(byte[36] == 0x1) bit[4] = bit[4] | 0x08 ;
else bit[4] = bit[4] & 0xf7 ;
if(byte[37] == 0x1) bit[4] = bit[4] | 0x04 ;
else bit[4] = bit[4] & 0xfb ;
if(byte[38] == 0x1) bit[4] = bit[4] | 0x02 ;
else bit[4] = bit[4] & 0xfd ;
if(byte[39] == 0x1) bit[4] = bit[4] | 0x01 ;
else bit[4] = bit[4] & 0xfe ;
}
/*byte6*/
for(i = 40;i < 48 ;i++)
{
if(byte[40] == 0x1) bit[5] = bit[5] | 0x80 ;
else bit[5] = bit[5] & 0x7f ;
if(byte[41] == 0x1) bit[5] = bit[5] | 0x40 ;
else bit[5] = bit[5] & 0xbf ;
if(byte[42] == 0x1) bit[5] = bit[5] | 0x20 ;
else bit[5] = bit[5] & 0xdf ;
if(byte[43] == 0x1) bit[5] = bit[5] | 0x10 ;
else bit[5] = bit[5] & 0xef ;
if(byte[44] == 0x1) bit[5] = bit[5] | 0x08 ;
else bit[5] = bit[5] & 0xf7 ;
if(byte[45] == 0x1) bit[5] = bit[5] | 0x04 ;
else bit[5] = bit[5] & 0xfb ;
if(byte[46] == 0x1) bit[5] = bit[5] | 0x02 ;
else bit[5] = bit[5] & 0xfd ;
if(byte[47] == 0x1) bit[5] = bit[5] | 0x01 ;
else bit[5] = bit[5] & 0xfe ;
}
/*byte7*/
for(i = 48;i < 56 ;i++)
{
if(byte[48] == 0x1) bit[6] = bit[6] | 0x80 ;
else bit[6] = bit[6] & 0x7f ;
if(byte[49] == 0x1) bit[6] = bit[6] | 0x40 ;
else bit[6] = bit[6] & 0xbf ;
if(byte[50] == 0x1) bit[6] = bit[6] | 0x20 ;
else bit[6] = bit[6] & 0xdf ;
if(byte[51] == 0x1) bit[6] = bit[6] | 0x10 ;
else bit[6] = bit[6] & 0xef ;
if(byte[52] == 0x1) bit[6] = bit[6] | 0x08 ;
else bit[6] = bit[6] & 0xf7;
if(byte[53] == 0x1) bit[6] = bit[6] | 0x04 ;
else bit[6] = bit[6] & 0xfb ;
if(byte[54] == 0x1) bit[6] = bit[6] | 0x02 ;
else bit[6] = bit[6] & 0xfd ;
if(byte[55] == 0x1) bit[6] = bit[6] | 0x01 ;
else bit[6] = bit[6] & 0xfe ;
}
/*byte8*/
for(i = 56;i < 64 ;i++)
{
if(byte[56] == 0x1) bit[7] = bit[7] | 0x80 ;
else bit[7] = bit[7] & 0x7f ;
if(byte[57] == 0x1) bit[7] = bit[7] | 0x40 ;
else bit[7] = bit[7] & 0xbf ;
if(byte[58] == 0x1) bit[7] = bit[7] | 0x20 ;
else bit[7] = bit[7] & 0xdf ;
if(byte[59] == 0x1) bit[7] = bit[7] | 0x10 ;
else bit[7] = bit[7] & 0xef ;
if(byte[60] == 0x1) bit[7] = bit[7] | 0x08 ;
else bit[7] = bit[7] & 0xf7 ;
if(byte[61] == 0x1) bit[7] = bit[7] | 0x04 ;
else bit[7] = bit[7] & 0xfb ;
if(byte[62] == 0x1) bit[7] = bit[7] | 0x02 ;
else bit[7] = bit[7] & 0xfd ;
if(byte[63] == 0x1) bit[7] = bit[7] | 0x01 ;
else bit[7] = bit[7] & 0xfe ;
}
}
/******************************byte2bit(end)**********************************/
/***********bit2byte(change 64bit-8byte to 64byte)(begin)*********************/
void bit2byte(unsigned char bit[8] , unsigned char byte[64])
{
int i=0 ;
for(i=0 ; i<=63 ; i++)
{
byte[i] = 0x0 ;
}
for(i=0 ; i<=7 ; i++)
{
if((bit[i] & 0x80) == 0x80) byte[i*8+0] = 0x01 ;
if((bit[i] & 0x40) == 0x40) byte[i*8+1] = 0x01 ;
if((bit[i] & 0x20) == 0x20) byte[i*8+2] = 0x01 ;
if((bit[i] & 0x10) == 0x10) byte[i*8+3] = 0x01 ;
if((bit[i] & 0x08) == 0x08) byte[i*8+4] = 0x01 ;
if((bit[i] & 0x04) == 0x04) byte[i*8+5] = 0x01 ;
if((bit[i] & 0x02) == 0x02) byte[i*8+6] = 0x01 ;
if((bit[i] & 0x01) == 0x01) byte[i*8+7] = 0x01 ;
}
}
/******************************bit2byte(end)**********************************/
/*********************************IP置换(begin)*******************************/
void ip_permute(unsigned char array[64])
{
int i;
unsigned char temp[64];
for(i=0;i<64;i++) temp[i]=array[ip[i]-1];
for(i=0;i<64;i++) array[i]=temp[i];
}
/*********************************IP置换(end)*********************************/
/*********************************IP逆置换(begin)*****************************/
void ip_1_permute(unsigned char array[64])
{
int i;
unsigned char temp[64];
for(i=0;i<64;i++) temp[i]=array[ip_1[i]-1];
for(i=0;i<64;i++) array[i]=temp[i];
}
/*********************************IP逆置换(end)*******************************/
/***********************E置换--32位膨胀为48位(begin)**************************/
void expand(unsigned char array[64])
{
int i;
unsigned char temp[64];
for(i=0;i<48;i++) temp[i]=array[e[i]-1];
for(i=0;i<48;i++) array[i]=temp[i];
}
/**********************E置换--32位膨胀为48位(end)*****************************/
/*******************************P置换(begin)**********************************/
void p_permute(unsigned char array[64])
{
int i;
unsigned char temp[64];
for(i=0;i<32;i++) temp[i]=array[p[i]-1];
for(i=0;i<32;i++) array[i]=temp[i];
}
/******************************P置换(end)*************************************/
/*******************************函数f(begin)**********************************/
void f(unsigned char r_byte[64],unsigned char k_bit[8])
{
int i,j;
int row, col;
unsigned char r_bit[8]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
unsigned char temp_bit[8]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
unsigned char temp_byte[64];
unsigned char s_out_bit[8]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} ;
expand(r_byte); /*now r is 48 bits */
byte2bit(r_byte,r_bit);
for(i=0;i<6;i++) r_bit[i]^=k_bit[i]; /*xor 48bit key*/
bit2byte(r_bit,r_byte);
for(i=0;i<8;i++)
{
/**********change 48bit(8bit x 6byte) to 48bit(6bit x 8byte)********/
for(j=0;j<64;j++) temp_byte[j] = 0x0 ;/*clear temp*/
temp_byte[6] = r_byte[i*6] ; /*get bit 0 in 6 bit*/
temp_byte[7] = r_byte[i*6+5] ; /*get bit 5 in 6 bit*/
byte2bit(temp_byte,temp_bit) ; /* 0000 00?? */
row = temp_bit[0] ; /*get row[i]*/
for(j=0;j<64;j++) temp_byte[j] = 0x0 ;/*clear temp*/
temp_byte[4] = r_byte[i*6+1] ; /*0000 ????*/
temp_byte[5] = r_byte[i*6+2] ;
temp_byte[6] = r_byte[i*6+3] ;
temp_byte[7] = r_byte[i*6+4] ;
byte2bit(temp_byte,temp_bit) ;
col = temp_bit[0] ; /*get column in S table*/
/**********change 48bit(8bit x 6byte) to 48bit(6bit x 8byte)********/
/*get number from S table with row and col*/
switch (i) {
case 0 :
s_out_bit[i] = s1[row][col] ;
break ;
case 1 :
s_out_bit[i] = s2[row][col] ;
break ;
case 2 :
s_out_bit[i] = s3[row][col] ;
break ;
case 3 :
s_out_bit[i] = s4[row][col] ;
break ;
case 4 :
s_out_bit[i] = s5[row][col] ;
break ;
case 5 :
s_out_bit[i] = s6[row][col] ;
break ;
case 6 :
s_out_bit[i] = s7[row][col] ;
break ;
case 7 :
s_out_bit[i] = s8[row][col] ;
break ;
} ;
} /*s_out_bit[0-7]:0000???? 0000???? 0000???? 0000????...0000???? */
/*change 64bit to 32bit : clean 0000(high 4bit)*/
r_bit[0] = (s_out_bit[0]<<4) + s_out_bit[1] ;
r_bit[1] = (s_out_bit[2]<<4) + s_out_bit[3] ;
r_bit[2] = (s_out_bit[4]<<4) + s_out_bit[5] ;
r_bit[3] = (s_out_bit[6]<<4) + s_out_bit[7] ;
/*now r_bit[0-7] = ???????? ???????? ???????? ???????? 0000..*/
bit2byte(r_bit,r_byte);
p_permute(r_byte);
}
/******************************函数f(end)*************************************/
/**************************生成子密钥(beging)*********************************/
void keychange(unsigned char oldkey[8] , unsigned char newkey[16][8])
{
int i=0,j=0,k=0 ;
int pc_1[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} ;
int pc_2[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} ;
int ccmovebit[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1} ;
unsigned char oldkey_byte[64] ; /*64位原始密钥,不过需要从oldkey[8]中提取出64位信息*/
unsigned char oldkey_byte1[64] ; /*实际只有56个字节,存放经过pc_1置换后的56位密钥*/
unsigned char oldkey_byte2[64] ; /*存放c(i)和d(i)合并起来后的56位,然后用于PC_2置换得到48位的k(i)*/
unsigned char oldkey_c[28] ; /*28位密钥c0*/
unsigned char oldkey_d[28] ; /*28位密钥d0*/
unsigned char cc_temp ;
unsigned char newkey_byte[16][64] ; /*16个子密钥k1、k2、...、k16,每个子密钥实际存放48位*/
bit2byte(oldkey,oldkey_byte) ;/*change to byte把64位(8字节)密钥转换为64字节,每字节代表密钥的一位*/
for(i=0;i<=55;i++) oldkey_byte1[i] = oldkey_byte[pc_1[i] - 1] ;/*goto PC-1*/
for(i=0;i<=27;i++) oldkey_c[i] = oldkey_byte1[i] ;/*move 28bit -> c0*/
for(i=28;i<=55;i++) oldkey_d[i -28] = oldkey_byte1[i] ;/*move other 28bit -> d0*/
/*cc_movebit : get c1-16,d1-16*/
for(i=0;i<=15;i++)
{
for(j=1;j<=ccmovebit[i];j++) /*循环左移位,位数由ccmovebit[i]事先确定*/
{
cc_temp = oldkey_c[0] ; /*move out the first bit*/
for(k=0;k<=26;k++)
{
oldkey_c[k] = oldkey_c[k+1] ;
}
oldkey_c[27] = cc_temp ; /*move the first bit to the last bit*/
cc_temp = oldkey_d[0] ; /*move out the first bit*/
for(k=0;k<=26;k++)
{
oldkey_d[k] = oldkey_d[k+1] ;
}
oldkey_d[27] = cc_temp ; /*move the first bit to the last bit*/
} /*cc_movebit*/
/*goto pc-2 change bit*/
for(k=0;k<=27;k++) oldkey_byte2[k] = oldkey_c[k] ;
for(k=28;k<=55;k++) oldkey_byte2[k] = oldkey_d[k-28] ;
/*add c(i)+d(i) -> for pc-2 change 56bit to 48bit k(i)*/
for(k=0;k<=47;k++) newkey_byte[i][k] = oldkey_byte2[pc_2[k] - 1] ;
}/*end of one of change the 48bit key*/
/*byte to bit for 48bit newkey*/
for(i=0;i<=15;i++) byte2bit(newkey_byte[i],newkey[i]) ;
}
/****************************生成子密钥(end)**********************************/
/************************加密算法des_encryption(begin)****************************/
void endes(unsigned char m_bit[8], unsigned char k_bit[8], unsigned char e_bit[8])
{
unsigned char m_bit1[8] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} ; /*明文经过IP置换后的存放地--8字节64位明文*/
unsigned char m_byte[64] ; /*存放原始明文--64字节64位明文*/
unsigned char key_n[16][8] ; /*存放子密钥*/
unsigned char l_bit[17][8] ; /*存放加密过程的每一层结果的左32位,实际每层只用4个字节表示32位结果*/
unsigned char r_bit[17][8] ; /*存放加密过程的每一层结果的右32位,实际每层只用4个字节表示32位结果*/
unsigned char e_byte[64] ; /*存放密文,64个字节表示64位密文*/
unsigned char r_byte[64] ; /*存放R(i),实际用32个字节存放32位有用信息*/
int i = 0 , j = 0;
keychange(k_bit,key_n) ;/*get the 48bit key x 16 (16rows x 6byte in key_n)*/
bit2byte(m_bit,m_byte) ;/*change to byte*/
ip_permute(m_byte);
byte2bit(m_byte,m_bit1) ;/*re-change to bit*/
for(i=0;i<=3;i++) l_bit[0][i] = m_bit1[i] ;/*move left 32bit -> l0*/
for(i=4;i<=7;i++) r_bit[0][i - 4] = m_bit1[i] ;/*move right 32bit -> r0*/
for(i=1;i<=16;i++) /*16 layer*/
{
for(j=0;j<=3;j++) l_bit[i][j] = r_bit[i-1][j] ;/*L(n) = R(n-1)*/
/*comput f(R(n-1),k)*/
bit2byte(r_bit[i-1],r_byte) ;
f(r_byte,key_n[i-1]);
byte2bit(r_byte,r_bit[i-1]);
for(j=0;j<=3;j++)/*get next r_bit*/
{
r_bit[i][j] = l_bit[i-1][j] ^ r_bit[i-1][j] ;
}
}/*end of endes*/
for(i=0;i<=3;i++) e_bit[i] = r_bit[16][i] ;
for(i=4;i<=7;i++) e_bit[i] = l_bit[16][i - 4] ; /*r_bit + l_bit -> e_bit(64bit)*/
bit2byte(e_bit,e_byte) ;/*change to byte for swap bit IP-1*/
ip_1_permute(e_byte);
byte2bit(e_byte,e_bit) ;/*got e_bit*/
}
/*************************加密算法des_encryption(end)*****************************/
/************************解密算法uncryption(begin)****************************/
void undes(unsigned char m_bit[8], unsigned char k_bit[8], unsigned char e_bit[8])
{ /*~~~注意,这里m_bit[8]实际上是密文,而e_bit[8]则是需要的明文!~~~~*/
unsigned char m_bit1[8] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} ; /*明文经过IP置换后的存放地--8字节64位明文*/
unsigned char m_byte[64] ; /*存放原始明文--64字节64位明文*/
unsigned char key_n[16][8] ; /*存放子密钥*/
unsigned char l_bit[17][8] ; /*存放加密过程的每一层结果的左32位,实际每层只用4个字节表示32位结果*/
unsigned char r_bit[17][8] ; /*存放加密过程的每一层结果的右32位,实际每层只用4个字节表示32位结果*/
unsigned char e_byte[64] ; /*存放密文,64个字节表示64位密文*/
unsigned char r_byte[64] ; /*存放R(i),实际用32个字节存放32位有用信息*/
int i = 0 , j = 0;
keychange(k_bit,key_n) ;/*get the 48bit key x 16 (16rows x 6byte in key_n)*/
bit2byte(m_bit,m_byte) ;/*change to byte*/
ip_permute(m_byte);
byte2bit(m_byte,m_bit1) ;/*re-change to bit*/
for(i=0;i<=3;i++) l_bit[0][i] = m_bit1[i] ;/*move left 32bit -> l0*/
for(i=4;i<=7;i++) r_bit[0][i - 4] = m_bit1[i] ;/*move right 32bit -> r0*/
for(i=1;i<=16;i++) /*16 layer*/
{
for(j=0;j<=3;j++) l_bit[i][j] = r_bit[i-1][j] ;/*L(n) = R(n-1)*/
/*comput f(R(n-1),k)*/
bit2byte(r_bit[i-1],r_byte) ;
f(r_byte,key_n[16-i]);
byte2bit(r_byte,r_bit[i-1]);
for(j=0;j<=3;j++)/*get next r_bit*/
{
r_bit[i][j] = l_bit[i-1][j] ^ r_bit[i-1][j] ;
}
}/*end of endes*/
for(i=0;i<=3;i++) e_bit[i] = r_bit[16][i] ;
for(i=4;i<=7;i++) e_bit[i] = l_bit[16][i - 4] ; /*r_bit + l_bit -> e_bit(64bit)*/
bit2byte(e_bit,e_byte) ;/*change to byte for swap bit IP-1*/
ip_1_permute(e_byte);
byte2bit(e_byte,e_bit) ;/*got e_bit*/
}
/*************************加密算法*****************************/
uint8_t * des_encryption_process(uint8_t *in_data)
{
int i,j;
uint8_t out_data[8];
uint8_t * out_data_ptr = out_data;
// printf("the original des_message is: ");
// for(i=0;i<8;i++) printf("%c",*(in_data+i));
// printf("\n");
// printf("the keyword is: ");
// for(i=0;i<8;i++) printf("%c",keyword[i]);
// printf("\n\n");
endes(in_data,keyword,out_data);
// printf("the des_encryption out_data is(hex): ");
// for(i=0; i<8; i++) printf("%x ",*(out_data+i));
// printf("\n");
return(out_data_ptr);
}
uint8_t testy[20],testx[20],ptrx;
uint8_t * testx_ptr=testx;
uint8_t des_encryption_result(uint8_t * dec_ram, uint8_t dec_length)
{
uint8_t i,j;
uint8_t * ptry = dec_ram;
for(i=0;i<10;i++){
*(dec_ram+dec_length+i) = 0x30;
}
j=0;
if(dec_length%8){
j++;
}
j += dec_length/8;
ptrx=0;
for(i=0;i<j;i++){
memcpy(testy,(dec_ram+i*8),8);
memcpy(testx_ptr, des_encryption_process(testy), 8);
memcpy((ptry+i*8),testx_ptr,8);
}
dec_length =j*8;
return(dec_length);
}
void des_process(void)
{
int i;
printf("the original des_message is: ");
for(i=0;i<8;i++) printf("%c",des_message[i]);
printf("\n");
printf("the keyword is: ");
for(i=0;i<8;i++) printf("%c",keyword[i]);
printf("\n\n");
endes(des_message,keyword,des_encryption);
// printf("the des_encryption des_message is(char): ");
// for(i=0;i<8;i++) printf("%c",des_encryption[i]);
// printf("\n");
printf("the des_encryption des_message is(hex): ");
for(i=0; i<8; i++) printf("%x ",des_encryption[i]);
printf("\n");
// bit2byte(des_encryption,encryption_byte);
// printf("the des_encryption des_message is(bin):\n");
// for(i=0; i<64; i++)
// if(i%8==7) printf("%1d ",encryption_byte[i]);
// else printf("%1d",encryption_byte[i]);
// printf("\n");
printf("\n\n\n************* after uncryption *****************\n");
undes(des_encryption,keyword,des_result);
printf("the uncryption des_message is: ");
for(i=0;i<8;i++)
printf("%c",des_result[i]);
printf("\n");
}