DES演算法C語言原始碼

2022-09-08 07:21:10 字數 4695 閱讀 1448

/*略去資訊頭,#include檔案和函式申明*/

ulong32 g_outkey[16][2] = ;/*輸出的key*/

ulong32 g_bufkey[2] = ;/*形成起始金鑰*/

/*實現時多採用查表方式,下面是定義的供查詢用的表*/

static ulong8 wz_lefttable[16] = ;

static ulong32 wz_leftandtab[3] = ;

static ulong8 wz_keyleft[28] = ;

static ulong8 wz_keyright[28] = ;

static ulong8 wz_keychoose[48] =;

static ulong8 wz_pc4[64] = ;

static ulong8  wz_pc1[64] = ;

static ulong8 wz_pc3[32] = ;

static ulong32  wz_pc2[64] = ;

static ulong8 exptab3[48] = ;

static ulong8 sp[8][64] =

,       ,,,

,,

,};

/*函式實現*/

int32 ddesn(ulong8 *data, ulong8 **key, ulong32 n_key,ulong32 readlen)

return success;

}int32 desn(ulong8 *data, ulong8 **key, ulong32 n_key,ulong32 readlen)

return success;

}int32 des3(ulong8 *data, ulong8 *key,ulong32 n ,ulong32 readlen)

}return success;

}int32 ddes3(ulong8 *data,ulong8 *key,ulong32 n ,ulong32 readlen)

}return success;

}int32 des(ulong8 *data, ulong8 *key,int32 readlen)

return success;

}int32 ddes(ulong8 *data,ulong8 *key,int32 readlen)

return success;

}int32 handle_data(ulong32 *left , ulong8 choice)

;            

/*第一次調整wz_pc1[64]*/

for ( j = 0 ; j < 64 ; j++)

}else}}

else

}else}}

}*left  = tmpbuf[0] ;

*right = tmpbuf[1];

tmpbuf[0] = 0 ;

tmpbuf[1] = 0 ;

switch( choice )

break;

case desdecry:

for ( number = 15 ; number >= 0 ; number--)

break;

default:

break;

}/*最後一輪操作不交換左右值*/

tmp = *left ;

*left = *right ;

*right = tmp ;        

/*最後一次調整wz_pc4[64]*/

for ( j = 0 ; j < 64 ; j++)

}else}}

else

}else}}

}*left =  tmpbuf[0] ;

*right = tmpbuf[1];

return success;

}int32 makedata(ulong32  *left ,ulong32  *right ,ulong32 number)

;              ulong32 datatmp = 0;        

ulong32 exp[2] = ;                        

//由32擴充至48位

for ( j = 0 ; j < 48 ; j++)

}            

else}}

for ( j = 0 ; j < 2 ; j++)

/*由48->32*/      

exp[1] >>= 8 ;

rexpbuf[7] = (ulong8) (exp[1]&0x0000003fl) ;

exp[1] >>= 6 ;

rexpbuf[6] = (ulong8) (exp[1]&0x0000003fl) ;

exp[1] >>= 6 ;

rexpbuf[5] = (ulong8) (exp[1]&0x0000003fl) ;

exp[1] >>= 6 ;

rexpbuf[4] = (ulong8) (exp[1]&0x0000003fl) ;

exp[0]  >>=  8 ;

rexpbuf[3] = (ulong8) (exp[0]&0x0000003fl) ;    

exp[0] >>= 6 ;

rexpbuf[2] = (ulong8) (exp[0]&0x0000003fl) ;

exp[0] >>= 6 ;

rexpbuf[1] = (ulong8) (exp[0]&0x0000003fl) ;

exp[0] >>= 6 ;

rexpbuf[0] = (ulong8) (exp[0]&0x0000003fl) ;    

exp[0] = 0 ;

exp[1] = 0 ;

/*由48-> 32*/

*right = 0 ;

for ( j = 0 ; j < 7 ; j++)

*right |= sp[j][rexpbuf[j]] ;

/*又要換位了*/

datatmp = 0;

for ( j = 0 ; j < 32 ; j++)

}*right = datatmp ;

/*一輪結束收尾操作*/                

*right ^= *left;      

*left = oldright;

return success;

}int32 makefirstkey( ulong32 *keyp )

;       ulong32 *pkey ;

ulong32 *pbufkey ;

int32 j;

pbufkey = (ulong32*)g_bufkey ;

pkey = (ulong32*)key;

memset((ulong8*)g_bufkey,0,sizeof(g_bufkey));    

memcpy((ulong8*)&key,(ulong8*)keyp ,8) ;      

memset((ulong8*)g_outkey,0,sizeof(g_outkey));

for(  j = 0 ; j < 28 ; j++)

}else

}if ( wz_keyright[j] > 32 )

}else}}

for (j = 0 ; j < 16 ; j++)

return success;

}int32 makekey(  ulong32 *keyleft,ulong32 *keyright ,ulong32 number)/*輸入金鑰的位址,乙個32位的*/

;       ulong32 *ptmpkey = (ulong32*)tmpkey;    

ulong32 *poutkey = (ulong32*)&g_outkey[number];

int32 j;        

memset((ulong8*)tmpkey,0,sizeof(tmpkey));          

/*要最高的一位或兩位*/

*ptmpkey = *keyleft&wz_leftandtab[wz_lefttable[number]] ;          

ptmpkey[1] = *keyright&wz_leftandtab[wz_lefttable[number]] ;              

if ( wz_lefttable[number] == 1)

else

ptmpkey[0] &= 0xfffffff0;

ptmpkey[1] &= 0xfffffff0;

/*得到高位的值*/

*keyleft <<= wz_lefttable[number] ;

*keyright <<= wz_lefttable[number] ;

*keyleft |= ptmpkey[0] ;

*keyright |= ptmpkey[1] ;            

ptmpkey[0] = 0;

ptmpkey[1] = 0;

/*從56位中選出48位,3個16位*/

for ( j = 0 ; j < 48 ; j++)

}            

else /*j>=24*/}}

return success;

}

遺傳演算法C語言原始碼

遺傳演算法是上學時曾經研究過的演算法,它是一種基於基因遺傳思想的快速搜尋遍歷演算法。簡單理解,它就是比一般的盲搜尋和其他的一些搜尋快的演算法。其主要目的就是為了能快速準確搜尋所求的值,用於求解一些複雜的數值應用,以及一些實時性要求高的演算法應用中。以下是以前練習過的 歡迎有需要的同學學習交流。inc...

c語言遊戲原始碼 C語言打字遊戲原始碼

到大街上,還是會羨慕那些情侶,但是依然相信舔狗一無所有,渣男滿載而歸。網易雲熱評 include include include include define max 51 第一測試字母的最大長度void help void start char str str max 1 0 給字串最後加上結束符...

DES演算法的c語言實現

網上找了一部分 稍微修改了下就可以使用了。已上傳github 原理 des演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的金鑰也是64位 實際用到了56位,第8 16 24 32 40 48 56 64位是校驗位,使得每個金鑰都有奇數個1 其演算法主要分為兩步 1 初始置換 其功能是把輸...