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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-des加密算法分析-文庫(kù)吧資料

2024-12-08 13:22本頁(yè)面
  

【正文】 最重要的密碼攻擊是窮盡密鑰搜索和線(xiàn)性密碼分析。新的攻擊手段不斷出現(xiàn), DES以面臨實(shí)實(shí)在在的威脅。如果不了解這一點(diǎn),把密鑰 Key的 8, 16, 24, ..... .64位作為有效 數(shù)據(jù)使用,將不能保證 DES 加密數(shù)據(jù)的安全性,對(duì)運(yùn)用 DES 來(lái)達(dá)到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險(xiǎn),這正是 DES 算法在應(yīng)用上的誤區(qū),留下了被人攻擊、被人破譯的極大隱患。這一點(diǎn),向我們提出了一個(gè)應(yīng)用上的要求,即 DES 的安全性是基于除了 8, 16, 24, ......64位外的其余 56位的組合變化 256才得以保證的。 DES算法中只用到 64位密鑰中的其中 56位,第 1 2 ......64 位 8 個(gè)位并未參與 DES運(yùn)算,而是用作奇偶校驗(yàn)。事實(shí)上,差分密碼分析在 DES 最初被研發(fā)時(shí)就已成為 IBM的研究者所知,但這種方法卻被保留了將近 20年,直到 Biham與 Shamir又獨(dú)立地發(fā)現(xiàn)了這種攻擊。 事實(shí)上,后來(lái)表明 DES 里的 S 盒是被設(shè)計(jì)成能夠防止某些類(lèi)型的攻擊的。而美國(guó)國(guó)家安全局能夠輕易的解密消息,同時(shí)還能宣稱(chēng) DES 算法是“安全”的。作為非線(xiàn)性部件, S 盒針對(duì)密碼體制的安全性至關(guān)重要。 在 DES 算法作為一個(gè)標(biāo)準(zhǔn)時(shí),曾出現(xiàn)過(guò)許多的批評(píng),其中之一就是針對(duì) S 盒的。 明文 M進(jìn)行 IP置換后,分成兩組: L0, R0,可得: L0=11111111 10111000 01110110 01010111 20 R0=00000000 11111111 00000110 10000011 R0進(jìn)行 E膨脹后,與密鑰 k1進(jìn)行異或運(yùn)算,得到 48比特的數(shù)據(jù) S=10111101 10011000 00110011 10110111 11101011 01001110 將這些數(shù)據(jù)分別裝入 S盒: ( 1) 101111進(jìn)入 S1,從 S1的第 3行第 7列的元素 7,可知其輸出為 0111 ( 2) 011001進(jìn)入 S2,從 S2的第 1行第 12 列的元 6,可知其輸出為 0110 ( 3) 100000進(jìn)入 S3,從 S3的第 2行第 0列的元素 13,可知其輸出為 1101 ( 4) 110011進(jìn)入 S4,從 S4的第 3行第 9列的元素 4,可知其輸出為 0100 ( 5) 101101進(jìn)入 S5,從 S5的第 3行第 6列的元素 2,可知其輸出為 0010 ( 6) 111110進(jìn)入 S6,從 S6的第 2行第 15 列的元素 6,可知其輸出為 0100 ( 7) 101101進(jìn)入 S7,從 S7的第 3行第 6列的元素 10,可知其輸出為 1010 ( 8) 001110進(jìn)入 S8,從 S8的第 0行第 7列的元素 1,可知其輸出為 0001 故 8個(gè) S盒的輸出為: 01110110 11010100 00100110 10100001 最后通過(guò) P得 f(R0,k1)為: 01110110 11010100 00100110 10100001 L0 f(R0,k1)得到 R1: R1=10111011 10011001 11101001 11001100 L1= R0=00000000 11111111 00000110 10000011 經(jīng)過(guò) 16輪的迭代最后得到: L16= R15=01010010 10011000 11000001 01011010 R16=11101000 10000011 01111000 01001100 最后經(jīng)過(guò) IP逆置換后得到密文如下: 00100100 01100001 00000010 10011011 01011001 10001000 11001111 10110100 DES 算法的分析 DES 算法具有極高安全性,最初,除了用窮舉搜索法對(duì) DES 算法進(jìn)行攻擊外,并沒(méi)有 21 發(fā)現(xiàn)更有效的辦法。 C1=11011001 00110010 00110111 0111 D1=01101000 10110001 00011100 1111 依次類(lèi)推, C1, D1繼續(xù)進(jìn)行循環(huán)左移,最后得到 C2, D2進(jìn)行循環(huán)左移,得到 C3, D3??C16, D16。 密鑰 k經(jīng)過(guò) PC1置換后,分成兩組 C0, D0。也就是其中的 k8 k16 k24 k32 k40 k48 k56 k64不起作用。首先是初設(shè)密鑰,然后調(diào)用密鑰設(shè)置函數(shù) des_setkey()和 DES 19 算法的運(yùn)行函數(shù) des_run(),最后得出密文以及解密后的文字。 printf(\n)。 printf(\n)。 des_run(str,str,decrypt)。 puts(****************************************)。 puts(str)。 des_run(str,str,encrypt)。 puts(****************************************)。 gets(str)。 printf(\n)。 puts(*****************DES***********************)。m39。a39。r39。g39。o39。r39。p39。 18 ( 6) bittobyte() 此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。 ( 3) memcpy() 此函數(shù)是庫(kù)函數(shù),主要作用是進(jìn)行內(nèi)存單元的復(fù)制。 } 這個(gè)函數(shù)用到以下函數(shù): ( 1) bytetobit() 此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。 } } transform(m,m,ipr_table,64)。 xor(li,ri,32)。i){ memcpy(tmp,li,32)。 } }else{ for(int i=15。 xor(ri,li,32)。i++){ memcpy(tmp,ri,32)。 if(type==encrypt){ 17 for(int i=0。 bytetobit(m,in,64)。m[0], *ri=amp。這個(gè)函數(shù)用于加密還是解密取決于 type的類(lèi)型,如果 type為 encrypt,則進(jìn)行加密;如果 type的類(lèi)型為 decrypt,則進(jìn)行解密。i++) out[i/8]|=in[i](i%8)。 for(int i=0。 } 與此相關(guān)的還有函數(shù) ttobyte() 此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。i++) out[i]=(in[i/8](i%8)) amp。 void bytetobit(bool *out,const char *in,int bits) { for(int i=0。i++) ina[i]^=inb[i]。 void xor(bool *ina,const bool *inb,int len) 16 { for(int i=0。 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}。s_box[i][j][k],4)。 k=(in[1]3)+(in[2]2)+(in[3]1)+in[4]。i8。 ( 3) s_box S盒。將輸出的 32比特的數(shù)據(jù)經(jīng) P置換,最后得到 32比特的數(shù)據(jù)。 } ( 2) e_table() E置換表,作用是將 32比特的輸入擴(kuò)展為 48 比特。i++) 15 tmp[i]=in[table[i]1]。 for(int i=0。在 f 函數(shù)中,先用于 E置換,然后進(jìn)行 P置換。//循環(huán)左移 f 函數(shù)和 S 函數(shù) f_func()和 s_func() 此函數(shù)的功能是 DES算法的關(guān)鍵, f是將 32比特的輸入轉(zhuǎn)化為 32比特的輸出。 static void xor(bool *ina, const bool *inb, int len)。//f函數(shù) static void s_func(bool out[32],const bool in[48])。 void des_setkey(const char key[8])。將 C0, D0進(jìn)行 LS1運(yùn)算, LS1是循環(huán)左移運(yùn)算。 14 第四章 DES 算法用 C++語(yǔ)言實(shí)現(xiàn) 設(shè)置密鑰函數(shù) des_setkey() 此函數(shù)的功能是由 64比特的密鑰產(chǎn)生 16個(gè)子密鑰 ki。 表 密鑰置換 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)表示一個(gè)或兩個(gè)位置的循環(huán)左移,當(dāng) i=1, 2, 9, 16 時(shí),移一個(gè)位置,當(dāng) i=3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15 時(shí),移兩個(gè)位置。 表 密鑰置換 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 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 初始密鑰 K( 64bit) PC1 C0( 28bit) D0( 28bit) LS1 LS1 C1 D1 LS2 LS2 LS16 LS16 C16 D16 PC2 PC2 K16 K1 13 D0=k63k55?? k12k4 然后分別進(jìn)行一個(gè)循環(huán)左移函數(shù) LS1,得到 C1, D1,將 C1( 28位) ,D1( 28位)連成56比特?cái)?shù)據(jù),再經(jīng)過(guò)密鑰置換 PC2(表 )做重排動(dòng)作,從而便得到了密鑰 K1( 48位)。 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 12 子密鑰的生成 圖 DES子密鑰生成流程圖 圖 。 8個(gè) S盒的代換方式都是一樣的。 例 S2的輸入為 101011, b1 =1, b6=1, b1 b6=(11)2=3 (b2 b3 b4 b5)2=(0101)2=5 查 S2表可知第 3行第 5列的輸出是 15, 15 的二進(jìn)制表示為 1111。 S盒如下表: 表 S盒函數(shù) S1 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 10 S2 15 1 8 14 6 11 3 4 9
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1