freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計-分組密碼算法des的加密和解密的實現(xiàn)(編輯修改稿)

2025-01-06 19:50 本頁面
 

【文章內(nèi)容簡介】 12 0 5 10 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 S3 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 S4 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14 S5 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6 4 5 1 11 10 13 7 8 15 9 12 5 6 3 0 14 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 河南科技大學(xué)本科畢業(yè)設(shè)計(論文) 11 S6 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13 S7 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12 S8 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11 S盒的置換規(guī)則為: 取 {0, 1,?, 15}上的 4個置換,即它的 4個排列排成 4行,得一 4*16矩陣。若給定該 S 盒的 6個輸入為 b0 b1 b2 b3 b4 b5,在 Si 表中找出 b0 b5行, b1b2 b3b4 列的元素,以 4 位二進制表示該元素,此為 S盒 Si的輸出。 例 S2 的輸入為 101011, b1 =1, b6=1, b1 b6=(11)2=3 (b2 b3 b4 b5)2=(0101)2=5 查 S2 表可知第 3 行第 5列的輸出是 15, 15的二進制表示為 1111。 則 S2 的輸出為 1111。 8個 S盒的代換方式都是一樣的。 S盒輸出的 32 比特經(jīng) P 置換, P 置換的功能是將 32 位的輸入,按以下順序置換,然后輸入仍為 32比特。 P置換的順序如表 : 表 置換 P 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25 河南科技大學(xué)本科畢業(yè)設(shè)計(論文) 12 子密鑰的生成 圖 DES子密鑰生成流程圖 圖 給出了子密鑰產(chǎn)生的流程圖。首先對初始密鑰經(jīng)過置換 PC1(表[7]),將初始密鑰的 8個奇偶校驗位剔除掉,而留下真正的 56 比特初始密鑰。 表 密鑰置換 PC1 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 初始密鑰 K( 64bit) PC1 C0( 28bit) D0( 28bit) LS1 LS1 C1 D1 LS2 LS2 LS16 LS16 C16 D16 PC2 PC2 K16 K1 河南科技大學(xué)本科畢業(yè)設(shè)計(論文) 13 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 然后將此 56 位分為 C0, D0 兩部分,各 28 比特, C0, D0 如下: C0=k57k49?? k44k36 D0=k63k55?? k12k4 然后分別進行一個循環(huán)左移函數(shù) LS1,得到 C1, D1,將 C1( 28位) ,D1( 28 位)連成 56 比特數(shù)據(jù),再經(jīng)過密鑰置換 PC2(表 )做重排動作,從而便得 到了密鑰 K1( 48 位)。依次類推,便可得到 K2, K3?? K16。 表 密鑰置換 PC2 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 其中 LS1( 1≤ i≤ 16)表示一個或兩個位置的循環(huán)左移,當 i=1, 2, 9,16 時,移一個位置,當 i=3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15時,移兩個位置。 DES 算法的解密過程 DES 算法的解密過程跟加密過程是一樣的,區(qū)別僅僅在于第一次迭代時用密鑰 k16,第二次 k1??,最后一次用 k1,算法本身沒有任何變化。 河南科技大學(xué)本科畢業(yè)設(shè)計(論文) 14 第 3 章 DES 算法用 C++語言實現(xiàn) 設(shè)置密鑰函數(shù) des_setkey() 此函數(shù)的功能是由 64比特的密鑰產(chǎn)生 16 個子密鑰 ki。首先將密鑰字節(jié)組 key[8]轉(zhuǎn)換為 64比特的位組,然后進行密鑰變換 PC1(祥見 PC1置換表) ,置換后得到 56 比特的密鑰, 把變換后的密鑰等分成兩部分 ,前 28 位記為C0, 后 28位記為 D0。將 C0, D0 進行 LS1 運算, LS1是循環(huán)左移運算。得到C1 , D1,最后將其進行 PC2置換(見 PC2置換表),得到子密鑰 次按循環(huán)左移 LSi(I=2~16,循環(huán)次數(shù)見循環(huán)左移規(guī)則 ), PC2置換得到 k2~ k16。 void des_setkey(const char key[8])。 static void f_func(bool in[32],const bool ki[48])。//f 函數(shù) static void s_func(bool out[32],const bool in[48])。//s 盒代替 //變換 static void transform(bool *out, bool *in, const char *table, int len)。 static void xor(bool *ina, const bool *inb, int len)。//異或 static void rotatel(bool *in, int len, int loop)。//循環(huán)左移 f 函數(shù)和 S 函數(shù) f_func()和 s_func() 此函數(shù)的功能是 DES 算法的關(guān)鍵, f 是將 32比特的輸入轉(zhuǎn)化為 32 比特的輸出。 這個兩個函數(shù)中主要用到以下函數(shù): ( 1) transform() 此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。在 f 函數(shù)中,先用于 E 置換,然后進行 P 置換。 void transform(bool *out,bool *in,const char *table,int len) { static bool tmp[256]。 河南科技大學(xué)本科畢業(yè)設(shè)計(論文) 15 for(int i=0。ilen。i++) tmp[i]=in[table[i]1]。 memcpy(out,tmp,len)。 } ( 2) e_table() E置換表,作用是將 32 比特的輸入擴展為 48 比特。 E輸出的 48比特的數(shù)據(jù)跟生成的子密鑰進行異或運算,然后把得到的 48比特的數(shù)據(jù)按順序分成 8組,每組 6 比特,分別通過 S1, S2 ,??, S8盒后又縮為 32 比特,即每盒輸入為 6比特,輸出為 4比特。將輸出的 32比特的數(shù)據(jù)經(jīng) P置換,最后得到 32比特的數(shù)據(jù)。 static const char e_table[48]={ 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 11, 12,13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1}。 ( 3) s_box S盒。 void s_func(bool out[32],const bool in[48]) { for(char i=0,j,k。i8。i++,in+=6,out+=4) { j=(in[0]1)+in[5]。 k=(in[1]3)+(in[2]2)+(in[3]1)+in[4]。 bytetobit(out,amp。s_box[i][j][k],4)。 } } ( 4) p_table() P置換表。 const static char p_table[32]={16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25}。 ( 5) xor() 此函數(shù)的功能是進行異或運算,異或運算是按位作不進位加法運算。 void xor(bool *ina,const bool *inb,int len) { 河南科技大學(xué)本科畢業(yè)設(shè)計(論文) 16 for(int i=0。ilen。i++) ina[i]^=inb[i]。 } ( 6) bytetobit() 此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。 void bytetobit(bool *out,const char *in,int bits) { for(int i=0。ibits。i++) out[i]=(in[i/8](i%8)) amp。1。 } 與此相關(guān)的還有函數(shù) ttobyte() 此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。 void bittobyte(char *out,const bool *in,int bits) { memset(ou
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1