/*略去資訊頭,#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 初始置換 其功能是把輸...