DES加密算法課程設(shè)計(jì)報(bào)告_第1頁(yè)
DES加密算法課程設(shè)計(jì)報(bào)告_第2頁(yè)
DES加密算法課程設(shè)計(jì)報(bào)告_第3頁(yè)
DES加密算法課程設(shè)計(jì)報(bào)告_第4頁(yè)
DES加密算法課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

軟件實(shí)現(xiàn)流程圖節(jié)點(diǎn)1節(jié)點(diǎn)1加密過(guò)程64位明文進(jìn)行IP置換后進(jìn)行分組Li[32]與Ri[32];i=0Ri[32]進(jìn)行E擴(kuò)展,生成48位比特串。48位比特串與子密鑰keys[i+1]進(jìn)行異或運(yùn)算。得到的48位比特串分為8組,進(jìn)入8個(gè)S盒中,并按照S盒的規(guī)則輸出8個(gè)十進(jìn)制數(shù)將8個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為32位比特串。節(jié)點(diǎn)132位比特串進(jìn)行P置換,產(chǎn)生新的32位比特串32位比特串與Li[32]進(jìn)行異或,產(chǎn)生R(i+1)[32]L(i+1)[32]=Ri[32];i++R16[32]在前,L16[32]在后進(jìn)行合并,合并后進(jìn)行IP逆置換,即產(chǎn)生密文i>15NY結(jié)束開(kāi)始輸入密文和密鑰密文和密鑰轉(zhuǎn)換成二進(jìn)制,存儲(chǔ)在文件中讀出64位密文和密鑰64位密鑰進(jìn)行pc-1置換,生成56位C[i+1]與D[i+1]合并為56位比特串,并進(jìn)行pc-2置換,產(chǎn)生子密鑰keys[i+1],i++;C[i]與D[i]左移一位或者兩位,由左移表決定左移位數(shù)Ls[16].左移產(chǎn)生C[i+1]與D[i+1]56位比特串分成左右各28位。C[i]與D[i],i=0;i>15NY節(jié)點(diǎn)1節(jié)點(diǎn)1加密過(guò)程64位明文進(jìn)行IP置換后進(jìn)行分組Li[32]與Ri[32];i=0Ri[32]進(jìn)行E擴(kuò)展,生成48位比特串。48位比特串與子密鑰keys[i+1]進(jìn)行異或運(yùn)算。得到的48位比特串分為8組,進(jìn)入8個(gè)S盒中,并按照S盒的規(guī)則輸出8個(gè)十進(jìn)制數(shù)將8個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為32位比特串。節(jié)點(diǎn)132位比特串進(jìn)行P置換,產(chǎn)生新的32位比特串32位比特串與Li[32]進(jìn)行異或,產(chǎn)生R(i+1)[32]L(i+1)[32]=Ri[32];i++R16[32]在前,L16[32]在后進(jìn)行合并,合并后進(jìn)行IP逆置換,即產(chǎn)生密文i>15NY結(jié)束開(kāi)始輸入密文和密鑰密文和密鑰轉(zhuǎn)換成二進(jìn)制,存儲(chǔ)在文件中讀出64位密文和密鑰64位密鑰進(jìn)行pc-1置換,生成56位C[i+1]與D[i+1]合并為56位比特串,并進(jìn)行pc-2置換,產(chǎn)生子密鑰keys[i+1],i++;C[i]與D[i]左移一位或者兩位,由左移表決定左移位數(shù)Ls[16].左移產(chǎn)生C[i+1]與D[i+1]56位比特串分成左右各28位。C[i]與D[i],i=0;i>15NY二、標(biāo)準(zhǔn)DES的加密過(guò)程1、明文與密鑰的輸入 首先8位ACSII字符的明文與密鑰的輸入,存放在mingwen[8]和miyao[8]中,然后將這些8位的ASCII字符轉(zhuǎn)換成二進(jìn)制的64位的明文和密鑰,分別存放在mingwenB[64]和miyaoB[64]中,并將二進(jìn)制的明文和密鑰放在文件中 intstr[8],i,j,ch,k; FILE*fp4;fp4=fopen("明文二進(jìn)制.txt","w"); k=0; for(i=0;i<8;i++) { ch=mingwen[i]; for(j=0;j<8;j++) { str[j]=ch%2; ch=ch/2; } for(j=7;j>=0;j--) { mingwenB[k]=str[j]; k++; fprintf(fp4,"%d",str[j]); } } 密鑰的轉(zhuǎn)換和存儲(chǔ)同理。2、密鑰的產(chǎn)生 1)、64位miyaoB[64]經(jīng)過(guò)pc-1置換,生成56位的比特串。定義pc1_Table[56],存放在afterpc1[56]中。 for(i=0;i<56;i++)afterpc1[i]=miyaoB[pc1_Table[i]-1]; 2)、56位比特串分組,生成C0[28]和D0[28] for(i=0;i<28;i++)C0[i]=afterpc1[i]; for(j=0,i=28;i<56;i++,j++)D0[j]=afterpc1[i]; 3)、C0[28]、D0[28]進(jìn)行左移,產(chǎn)生C[16][28]和D[16][28],為進(jìn)行pc-2置換產(chǎn)生密鑰做準(zhǔn)備。 for(i=0;i<27;i++) //第一輪數(shù)據(jù)生成C[0][28]與D[0][28] { C[0][i]=C0[i+1]; D[0][i]=D0[i+1]; } C[0][27]=C0[0]; D[0][27]=D0[0]; for(i=1;i<16;i++) //第二輪數(shù)據(jù)至第十六輪數(shù)據(jù)生成 { if(i==1||i==8||i==15) { for(j=0;j<27;j++) //左移1位 { C[i][j]=C[i-1][j+1]; D[i][j]=D[i-1][j+1]; } C[i][27]=C[i-1][0]; D[i][27]=D[i-1][0]; } else //左移2位 { for(j=0;j<26;j++) { C[i][j]=C[i-1][j+2]; D[i][j]=D[i-1][j+2]; } C[i][26]=C[i-1][0]; C[i][27]=C[i-1][1]; D[i][26]=D[i-1][0]; D[i][27]=D[i-1][1]; } } //產(chǎn)生16輪左右數(shù)據(jù),為pc-2置換準(zhǔn)備。 4)、左右兩部分比特串合并,存放在intbeforekey[16][56]中 k=0; for(i=0;i<16;i++) { for(j=0;j<28;j++) beforekey[i][j]=C[i][j]; for(k=0;k<28;k++,j++) beforekey[i][j]=D[i][k]; } 5)、beforekey[16][56]經(jīng)過(guò)pc-2置換,產(chǎn)生16輪密鑰keys[16][48], for(i=0;i<16;i++) for(j=0;j<48;j++) keys[i][j]=beforekey[i][pc_2table[j]-1];至此,16輪子密鑰產(chǎn)生完畢,為keys[16][48]。3、密文的產(chǎn)生 1)、明文經(jīng)過(guò)初始置換IP置換。結(jié)果放在afterIP[64]中。 for(j=0;j<64;j++) { afterIP[j]=mingwenB[IP_table[j]-1]; } 2)、明文的第0次分組,左部分L0[32],右部分R0[32]。 for(i=0;i<32;i++) L0[i]=afterIP[i]; for(j=0,i=32;i<64;i++,j++) R0[j]=afterIP[i]; 3)、為產(chǎn)生密文,要進(jìn)行16輪的循環(huán),每次循環(huán)生成一個(gè)L[i][32]和R[i][32],下面進(jìn)行第一次循環(huán),生成L[0][32]和R[0][32]。 for(i=0;i<32;i++) //Li=R(i-1) L[0][i]=R0[i]; 4)、至于R[0][32]的生成,R[0][32]=L0[32]^f(R0,keys[0])。因此,要首先計(jì)算出f值。R0[32]經(jīng)過(guò)E變換,由32位擴(kuò)展為48位,然后與子密鑰進(jìn)行異或,為進(jìn)入S盒做準(zhǔn)備。結(jié)果放在afterER0[48]中 for(i=0;i<48;i++) afterER0[i]=R0[E_table[i]-1]; 5)、E擴(kuò)展后,與子密鑰進(jìn)行異或,生成進(jìn)入S盒前的數(shù)據(jù)。存放在beforeS[48]. for(i=0;i<48;i++) if(afterER0[i]==keys[0][i]) beforeS[i]=0; else beforeS[i]=1; 6)、要進(jìn)入S盒的48位比特串要經(jīng)過(guò)8個(gè)不同的S盒,因此,將48位比特串分在8個(gè)數(shù)組中,放在beforeSBox[8][6]. for(k=0,i=0;i<8;i++) for(j=0;j<6;j++) { beforeSBox[i][j]=beforeS[k]; k++; } 7)、進(jìn)入S盒后,進(jìn)過(guò)8個(gè)S盒,每個(gè)S盒產(chǎn)生一個(gè)十進(jìn)制的數(shù)字,在0~15之間。beforeSBox[i][6]中的6個(gè)數(shù)字,第0、5位組成了S盒的行號(hào),第1、2、3、4,4位組成了S盒的列號(hào),根據(jù)行列選中S盒中的數(shù)據(jù)作為輸出,存放在afterSBox[8]中。 inthang,lie; for(i=0;i<8;i++) { hang=beforeSBox[i][0]*2+beforeSBox[i][5]; lie=beforeSBox[i][1]*8+beforeSBox[i][2]*4+beforeSBox[i][3]*2+beforeSBox[i][4]; afterSBox[i]=SBox[i][hang][lie]; } 8)、由S盒出來(lái)的8個(gè)十進(jìn)制數(shù)字轉(zhuǎn)換成32位的二進(jìn)制比特串,存放在beroreP[32]中,為接下來(lái)的P置換做準(zhǔn)備。 k=0; inttemp; intstr1[4]; for(i=0;i<8;i++) { temp=afterSBox[i]; for(j=0;j<4;j++) { str1[j]=temp%2; temp=temp/2; } for(j=3;j>=0;j--) { beforep[k]=str1[j]; k++; } } 9)、轉(zhuǎn)換為二進(jìn)制的32位比特串進(jìn)行P置換,生成新的32位比特串,也就是f的值。存放在P[32]中。 for(i=0;i<32;i++) p[i]=beforep[p_table[i]-1]; 至此,第一輪的循環(huán)已經(jīng)完成,成功產(chǎn)生了L[0][32]和R[0][32]。 10)、對(duì)于剩下的15輪循環(huán),用一個(gè)循環(huán)語(yǔ)句進(jìn)行控制,生成余下的15輪中間數(shù)據(jù)的左部和右部,最后產(chǎn)生L[15][32]和R[15][32]。 11)、得到的最后一輪左部32位比特串和右部32位比特串進(jìn)行合并,但是,合并的時(shí)候,右部32位比特串在前,R[15][32]在前,而L[15][32]在后。結(jié)果存放在beforeoutput[64]中 for(i=0;i<32;i++) //數(shù)據(jù)合并,R[15][32]在前,L[15][32]在后面 beforeoutput[i]=R[15][i]; for(i=32,j=0;i<64;i++,j++) beforeoutput[i]=L[15][j]; 12)、左右數(shù)據(jù)合并后的比特串進(jìn)行最后的逆置換,生成64位的二進(jìn)制密文。存放在output[64]中。 for(i=0;i<64;i++) output[i]=beforeoutput[IPR_tabel[i]-1];//得到64位密文 13)、將得到的64位密文轉(zhuǎn)換為8位的ASCII字符。 intcharB[8][8]; k=0;charmiwen[8]; for(i=0;i<8;i++) for(j=0;j<8;j++) { charB[i][j]=output[k]; k++; } for(i=0;i<8;i++) { str[i]=0; if(charB[i][0]==1) str[i]=str[i]+128; if(charB[i][1]==1) str[i]=str[i]+64; if(charB[i][2]==1) str[i]=str[i]+32; if(charB[i][3]==1) str[i]=str[i]+16; if(charB[i][4]==1) str[i]=str[i]+8; if(charB[i][5]==1) str[i]=str[i]+4; if(charB[i][6]==1) str[i]=str[i]+2; if(charB[i][7]==1) str[i]=str[i]+1; } m_outputMiwen=""; for(i=0;i<8;i++) miwen[i]=str[i]; //至此,得到密文miwen[8]三、標(biāo)準(zhǔn)DES的解密過(guò)程 解密與加密的過(guò)程幾乎完全相同,唯一不同的地方是:在進(jìn)行E擴(kuò)展后要與子密鑰進(jìn)行異或的時(shí)候,第一輪要與第十六輪子密鑰進(jìn)行異或。依次類推,第十六輪要與第一輪子密鑰進(jìn)行異或。因此對(duì)于DES的解密過(guò)程就不再細(xì)說(shuō)。程序運(yùn)行結(jié)果截圖1、初始界面,界面的初始化輸入的明文/密文是“20082374”2、點(diǎn)擊加密:進(jìn)入加密界面,在這個(gè)界面里顯示加密過(guò)程中的所有細(xì)節(jié),包括循環(huán)的次數(shù),每輪循環(huán)的子密鑰、左右部數(shù)據(jù)。3、再次點(diǎn)擊加密按鈕,進(jìn)行數(shù)據(jù)的加密,64位的明文經(jīng)過(guò)加密生成64位密文,“64位明文:”是輸入的8位明文的二進(jìn)制表示?!?4位密鑰:”是輸入的8位密鑰的二進(jìn)制表示?!?4位密文:”是經(jīng)過(guò)加密之后產(chǎn)生的密文?!把h(huán)輪數(shù)”是記錄十六輪循環(huán)的次數(shù)?!白用荑€”記錄每次循環(huán)的時(shí)候與R(i-1)進(jìn)行異或的48位子密鑰?!白蟛浚↙i)”指的是每次循環(huán)生成的Li,左部32位比特串?!坝也浚≧i)”指的是每次循環(huán)產(chǎn)生的右部Ri,32位比特串。4、點(diǎn)擊返回按鈕,返回主界面。5、點(diǎn)擊解密按鈕,進(jìn)入解密界面,在這個(gè)界面里顯示了解密過(guò)程中的所有細(xì)節(jié),包括循環(huán)的次數(shù),每輪循環(huán)的子密鑰、左右部數(shù)據(jù)。6、點(diǎn)擊解密按鈕,進(jìn)行數(shù)據(jù)的加密,64位的密文經(jīng)過(guò)解密生成64位的明文,“64位密文:”是輸入的8位密文的二進(jìn)制表示。“64位密鑰:”是輸入的8位密鑰的二進(jìn)制表示?!?4位明文:”是經(jīng)過(guò)解密之后產(chǎn)生的明文?!把h(huán)輪數(shù)”是記錄十六輪循環(huán)的次數(shù)?!白用荑€”記錄每次循環(huán)的時(shí)候與R(i-1)進(jìn)行異或的48位子密鑰。“左部(Li)”指的是每次循環(huán)生成的Li,左部32位比特串?!坝也浚≧i)”指的是每次循環(huán)產(chǎn)生的右部Ri,32位比特串。7、點(diǎn)擊返回按鈕,返回主界面8、點(diǎn)擊退出按鈕,退出程序,程序結(jié)束。

密文對(duì)密鑰敏感性的測(cè)試 在明文不變的情況下,通過(guò)對(duì)密鑰改變一位和多位進(jìn)行密文對(duì)密鑰敏感性的測(cè)試,觀察密文的改變情況。下面給出部分?jǐn)?shù)據(jù)和分析結(jié)果。 例:明文:20082374密鑰:1:abcdefgh,2:bbcdefgh3:abddefgh4:accdefgh5:abcdefgi6:abcdefgg7:abcdefhg8:abcdeffh9:abcdefhh10:abcdeggh11:abcdeegh這下密鑰均是相對(duì)于密鑰“abcdefgh”改變一位,得到的密文如下:01:111000110000100111010000101110000010110101101011000111010011110102:011010010111110010001101001110100010111001000011110001010001111003:000101100101110010100010001001110110111111100000111100001100000104:111000110000100111010000101110000010110101101011000111010011110105:111000110000100111010000101110000010110101101011000111010011110106:101001100100000010111000111001101110001001101111001010010111110107:111101010001101010110101111000110101000101110000101000111100111008:111000110000100111010000101110000010110101101011000111010011110109:111110001010010100010010100110100001011101100111111111010001010010:111000110000100111010000101110000010110101101011000111010011110111:1001010000011100101100000100111000110010011111010000010001101111 通過(guò)對(duì)類似的一百組數(shù)據(jù)進(jìn)行比較和分析,密鑰改變一位,密文改變的位數(shù)分別有28位、34位、34位、39位、0位、27位、31位、33位、25位、24位等等。通過(guò)一系列的測(cè)試,對(duì)密鑰改變一位,密文的位數(shù)改變范圍為0~34,密鑰改變一位而密文不改變的概率幾乎為零,改變位數(shù)在20位以上的占95%以上。下面對(duì)密鑰改變兩位測(cè)試, 例:明文20082374密鑰:1:abcdefgh,2:bacdefgh3:abdcefgh4:abcdefhg5:abcdffgh6:abccdfgh7:abbdefhh8:abbdefgg9:acddefgh10:abcddegh11:abcceegh密文:01:111000110000100111010000101110000010110101101011000111010011110102:011010010111110010001101001110100010111001000011110001010001111003:000010101101010011010101100011000001001000011001101010001010100004:111101010001101010110101111000110101000101110000101000111100111005:010100010101100010001011001011100111101010010011010010010110011106:101110100011011110101110010011011100110101000011010101110001111007:111110001010010100010010100110100001011101100111111111010001010008:101001100100000010111000111001101110001001101111001010010111110109:000101100101110010100010001001110110111111100000111100001100000110:100101000001110010110000010011100011001001111101000001000110111101:111000110000100111010000101110000010110101101011000111010011110111:0001100011010010000011000110101101011111001100010100110001001001 通過(guò)對(duì)類似數(shù)據(jù)進(jìn)行比較分析,對(duì)密鑰改變2位,密文的位數(shù)變化情況為:26位、35位、35位、33位、32位、25位、25位、39位、30位、38位等。對(duì)密鑰改變兩位,密文的位數(shù)改變范圍為大致為:25~39位。分析結(jié)果:標(biāo)準(zhǔn)DES加密算法密文對(duì)密鑰十分敏感,密文改變一位或者幾位,都會(huì)是相應(yīng)的密文改變二十幾位,大部分情況下密文位數(shù)的改變?cè)诎霐?shù)以上,也就是改變的位數(shù)超過(guò)32位。由于標(biāo)準(zhǔn)DES加密算法對(duì)于密鑰十分敏感,所以使用這種算法加密的安全性取決于密鑰,密鑰的復(fù)雜程度和密鑰的安全性決定了加密的數(shù)據(jù)的安全性。編程體會(huì) 通過(guò)這次課程設(shè)計(jì),用程序?qū)崿F(xiàn)了標(biāo)準(zhǔn)DES加密與解密算法。談到編程體會(huì)與收獲,最主要的一個(gè)收獲就是對(duì)DES算法的深入理解和掌握。由于要編寫代碼實(shí)現(xiàn)DES算法,因此對(duì)于DES算法的每一個(gè)細(xì)節(jié)可以說(shuō)是了如指掌了,每一個(gè)步驟總是推敲了一遍又一遍,找到最為簡(jiǎn)潔而清晰的實(shí)現(xiàn)方法。例如,在編寫的過(guò)程中,我參考了一些網(wǎng)上的代碼,那些代碼在DES的十六輪加密與解密循環(huán)的實(shí)現(xiàn)上,竟然硬生生每一次循環(huán)寫一次代碼,為每一次循環(huán)中出現(xiàn)的變量定義了十六次,雖然思路清晰,確使得程序變得異常的龐大,增大很大的內(nèi)存開(kāi)銷,使得程序執(zhí)行的效率就不高。我在處理解密與解密的循環(huán)時(shí),由于,第一次循環(huán)使用的數(shù)據(jù)是第一次分組的數(shù)據(jù),與之后的數(shù)據(jù)在形式上相同,但表達(dá)上卻不相同,因此,對(duì)于加密與解密的十六輪循環(huán),我單獨(dú)處理第一次循環(huán),然后利用統(tǒng)一的表達(dá)方式和變量進(jìn)行余下的十五輪循環(huán),第十五輪循環(huán)結(jié)束的時(shí)候,就產(chǎn)生了用于產(chǎn)生密文或明文的最后的左部和右部數(shù)據(jù)。 通過(guò)這次課程設(shè)計(jì),另外一個(gè)收獲就是提高了自己編程能力,在編程實(shí)現(xiàn)DES算法的時(shí)候,需要進(jìn)行大量的代碼編寫工作,這使得我編寫代碼的能力有了大大的提高,差錯(cuò)糾錯(cuò)的能力也相應(yīng)的得到了提高。 最后是感謝和老師的教誨。

核心源代碼1、加密過(guò)程(JiaMi.cpp)//JiaMi.cpp:implementationfile//#include"stdafx.h"#include"DES.h"#include"JiaMi.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif#include"DESDlg.h"http:///////////////////////////////////////////////////////////////////////////////JiaMidialogJiaMi::JiaMi(CWnd*pParent/*=NULL*/) :CDialog(JiaMi::IDD,pParent){ //{{AFX_DATA_INIT(JiaMi) m_Mingwen=_T(""); m_Miyao=_T(""); m_Miwen=_T(""); m_outputMiwen=_T(""); //}}AFX_DATA_INIT}voidJiaMi::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(JiaMi) DDX_Control(pDX,IDC_LIST1,m_output); DDX_Text(pDX,IDC_Mingwen,m_Mingwen); DDX_Text(pDX,IDC_Miyao,m_Miyao); DDX_Text(pDX,IDC_Miwen,m_Miwen); DDX_Text(pDX,IDC_outMiwen,m_outputMiwen); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(JiaMi,CDialog) //{{AFX_MSG_MAP(JiaMi) ON_BN_CLICKED(IDC_back,Onback) ON_BN_CLICKED(IDC_JiaMi,OnJiaMi) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//JiaMimessagehandlersBOOLJiaMi::OnInitDialog(){ CDialog::OnInitDialog(); m_output.ModifyStyle(0,LVS_REPORT); DWORDstyle=m_output.GetExStyle(); style=style^LVS_EX_CHECKBOXES; m_output.SetExtendedStyle(style|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_output.InsertColumn(0,"循環(huán)輪數(shù)",LVCFMT_LEFT,80); m_output.InsertColumn(1,"子密鑰",LVCFMT_LEFT,450); m_output.InsertColumn(2,"左部(Li)",LVCFMT_LEFT,350); m_output.InsertColumn(3,"右部(Ri)",LVCFMT_LEFT,350); //TODO:Addextrainitializationhere returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidJiaMi::Onback(){ //TODO:Addyourcontrolnotificationhandlercodehere ShowWindow(SW_HIDE); CDESDlgdlg; dlg.DoModal();}voidJiaMi::OnJiaMi(){ //TODO:Addyourcontrolnotificationhandlercodehere /*64位明文的輸入:將明文和密鑰轉(zhuǎn)換成二進(jìn)制并顯示*/ FILE*fp1,*fp2; inti,j,k; intstr[8]; charmingwen[8],miyao[8]; //存儲(chǔ)從文件中讀取的明文和密鑰 intmingwenB[64],miyaoB[64]; //存儲(chǔ)64位二進(jìn)制的明文和密鑰 fp1=fopen("data.txt","r"); fp2=fopen("miyao.txt","r"); if(fp1==NULL||fp2==NULL) { MessageBox("明文和密鑰文件打開(kāi)失敗!"); return; } for(i=0;i<8;i++) { fscanf(fp1,"%c",&mingwen[i]); fscanf(fp2,"%c",&miyao[i]); } fclose(fp1); fclose(fp2); FILE*fp4,*fp5; charch; fp4=fopen("明文二進(jìn)制.txt","w"); fp5=fopen("密鑰二進(jìn)制.txt","w"); k=0; for(i=0;i<8;i++) { ch=mingwen[i]; for(j=0;j<8;j++) { str[j]=ch%2; ch=ch/2; } for(j=7;j>=0;j--) { mingwenB[k]=str[j]; k++; fprintf(fp4,"%d",str[j]); } } fclose(fp4); k=0; for(i=0;i<8;i++) { ch=miyao[i]; for(j=0;j<8;j++) { str[j]=ch%2; ch=ch/2; } for(j=7;j>=0;j--) { miyaoB[k]=str[j]; k++; fprintf(fp5,"%d",str[j]); } } fclose(fp5); m_Mingwen=""; for(i=0;i<64;i++) //二進(jìn)制明文顯示在界面上 { m_Mingwen=m_Mingwen+(char)(48+mingwenB[i]); if((i+1)%8==0) m_Mingwen=m_Mingwen+""; } m_Miyao=""; for(i=0;i<64;i++) //二進(jìn)制密鑰顯示在界面上 { m_Miyao=m_Miyao+(char)(48+miyaoB[i]); if((i+1)%8==0) m_Miyao=m_Miyao+""; } /*初始置換IP*/ intIP_table[64]={58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7}; intafterIP[64]; for(j=0;j<64;j++) { afterIP[j]=mingwenB[IP_table[j]-1]; } /*明文的第零次分組,L0[32],R0[32]*/ intL0[32],R0[32]; for(i=0;i<32;i++) L0[i]=afterIP[i]; for(j=0,i=32;i<64;i++,j++) R0[j]=afterIP[i]; /*十六輪子密鑰的生成*/ intpc_1table[56]={ //pc_1置換表 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}; intpc_2table[48]={ //pc_2置換表 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}; intafterpc_1[56]; /*經(jīng)過(guò)pc_1置換*/ for(i=0;i<56;i++) afterpc_1[i]=miyaoB[pc_1table[i]-1]; /*密鑰第0次分組*/ intC0[28],D0[28]; for(i=0;i<28;i++) C0[i]=afterpc_1[i]; for(j=0,i=28;i<56;i++,j++) D0[j]=afterpc_1[i]; /*十六輪子密鑰產(chǎn)生前的中間數(shù)據(jù),左移產(chǎn)生的C[16][28],D[16][28]*/ intC[16][28],D[16][28]; for(i=0;i<27;i++) //第一輪數(shù)據(jù)生成C[0][28]與D[0][28] { C[0][i]=C0[i+1]; D[0][i]=D0[i+1]; } C[0][27]=C0[0]; D[0][27]=D0[0]; for(i=1;i<16;i++) //第二輪數(shù)據(jù)至第十六輪數(shù)據(jù)生成 { if(i==1||i==8||i==15) { for(j=0;j<27;j++) //左移1位 { C[i][j]=C[i-1][j+1]; D[i][j]=D[i-1][j+1]; } C[i][27]=C[i-1][0]; D[i][27]=D[i-1][0]; } else { for(j=0;j<26;j++) { C[i][j]=C[i-1][j+2]; D[i][j]=D[i-1][j+2]; } C[i][26]=C[i-1][0]; C[i][27]=C[i-1][1]; D[i][26]=D[i-1][0]; D[i][27]=D[i-1][1]; } } /*十六輪子密鑰初始數(shù)據(jù)合并,為pc_2置換生成子密鑰做準(zhǔn)備*/ intbeforekey[16][56]; k=0; for(i=0;i<16;i++) { for(j=0;j<28;j++) beforekey[i][j]=C[i][j]; for(k=0;k<28;k++,j++) beforekey[i][j]=D[i][k]; }/*beforekey[16][56]經(jīng)過(guò)pc_2置換,生成16輪子密鑰key[16][48]*/ intkeys[16][48]; for(i=0;i<16;i++) for(j=0;j<48;j++) keys[i][j]=beforekey[i][pc_2table[j]-1];/*十六輪循環(huán)生成密文,首先是L[16][32]和R[16][32]的生成*/ intL[16][32],R[16][32]; intE_table[48]={ 32,1,2,3,4,5, 4,5,6,7,8,9, 8,9,10,11,12,13, 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,31}; intafterER0[48],beforeS[48]; for(i=0;i<32;i++) //Li=R(i-1) L[0][i]=R0[i]; for(i=0;i<48;i++) //E置換,生成48位數(shù)據(jù),與子密鑰進(jìn)行異或,為進(jìn)入S盒做準(zhǔn)備 afterER0[i]=R0[E_table[i]-1]; for(i=0;i<48;i++) if(afterER0[i]==keys[0][i]) beforeS[i]=0; else beforeS[i]=1;/*將beforeS[48]分在8個(gè)數(shù)組中,為經(jīng)過(guò)8個(gè)S盒準(zhǔn)備*/ intbeforeSBox[8][6]; k=0; for(i=0;i<8;i++) for(j=0;j<6;j++) { beforeSBox[i][j]=beforeS[k]; k++; }/*S盒變換,48位數(shù)據(jù)生成32位數(shù)據(jù)*/ intafterSBox[8]; intSBox[8][4][16]={ //S盒變換表 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, 15,1,8,14,6,11,3,4,9,7,2,13,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, 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, 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, 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,2,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, 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, 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, 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}; inthang,lie; for(i=0;i<8;i++) { hang=beforeSBox[i][0]*2+beforeSBox[i][5]; lie=beforeSBox[i][1]*8+beforeSBox[i][2]*4+beforeSBox[i][3]*2+beforeSBox[i][4]; afterSBox[i]=SBox[i][hang][lie]; }/*將從S盒中出來(lái)的8個(gè)十進(jìn)制數(shù)字轉(zhuǎn)換成32位的二進(jìn)制數(shù)*/ intbeforep[32]; k=0; inttemp; intstr1[4]; for(i=0;i<8;i++) { temp=afterSBox[i]; for(j=0;j<4;j++) { str1[j]=temp%2; temp=temp/2; } for(j=3;j>=0;j--) { beforep[k]=str1[j]; k++; } }/*從S盒輸入的32位的二進(jìn)制數(shù)進(jìn)行P置換,生成的即是f函數(shù)的結(jié)果*/ intp_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}; intp[32]; for(i=0;i<32;i++) p[i]=beforep[p_table[i]-1];/*p[32]與L0[32]進(jìn)行異或,得到R[0][32]*/ for(i=0;i<32;i++) { R[0][i]=p[i]+L0[i]; if(R[0][i]==2) R[0][i]=0; }/*已經(jīng)生成L[0][32]和R[0][32],下面進(jìn)行十五輪循環(huán),生成其余L[i][32]和R[i][32]*/ intafterER[16][48]; intn; for(i=1;i<16;i++) { for(j=0;j<32;j++) L[i][j]=R[i-1][j]; for(j=0;j<48;j++) //E置換 afterER[i][j]=R[i-1][E_table[j]-1]; for(j=0;j<48;j++) //與子密鑰進(jìn)行異或 { if(afterER[i][j]==keys[i][j]) beforeS[j]=0; else beforeS[j]=1; } k=0; for(j=0;j<8;j++) //生成進(jìn)入S盒錢的8個(gè)數(shù)組,分別進(jìn)入8個(gè)S盒 for(n=0;n<6;n++) { beforeSBox[j][n]=beforeS[k]; k++; } for(j=0;j<8;j++) //進(jìn)入S盒,從8個(gè)S盒中生成8個(gè)數(shù) { hang=beforeSBox[j][0]*2+beforeSBox[j][5]; lie=beforeSBox[j][1]*8+beforeSBox[j][2]*4+beforeSBox[j][3]*2+beforeSBox[j][4]; afterSBox[j]=SBox[j][hang][lie]; } k=0; for(j=0;j<8;j++) //S盒出來(lái)的8個(gè)十進(jìn)制數(shù)轉(zhuǎn)換成32位的二進(jìn)制數(shù) { temp=afterSBox[j]; for(n=0;n<4;n++) { str1[n]=temp%2; temp=temp/2; } for(n=3;n>=0;n--) { beforep[k]=str1[n]; k++; } } for(j=0;j<32;j++) p[j]=beforep[p_table[j]-1]; for(j=0;j<32;j++) if(p[j]==L[i-1][j]) R[i][j]=0; else R[i][j]=1; }/*通過(guò)十五輪循環(huán),最后得到L[15][32]和R[15][32],合并之后進(jìn)行IP逆置換生成密文*/ intbeforeoutput[64]; intoutput[64]; intIPR_tabel[64]={ 40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25}; for(i=0;i<32;i++) //數(shù)據(jù)合并,R[15][32]在前,L[15][32]在后面 beforeoutput[i]=R[15][i]; for(i=32,j=0;i<64;i++,j++) beforeoutput[i]=L[15][j]; for(i=0;i<64;i++) output[i]=beforeoutput[IPR_tabel[i]-1];//得到64位密文 m_Miwen=""; for(i=0;i<64;i++) //將64位二進(jìn)制密文輸出到界面上 { m_Miwen=m_Miwen+(char)(48+output[i]); if((i+1)%8==0) m_Miwen=m_Miwen+""; }/*將output[64]二進(jìn)制密文轉(zhuǎn)換成ASCII字符*/ intcharB[8][8]; k=0; for(i=0;i<8;i++) for(j=0;j<8;j++) { charB[i][j]=output[k]; k++; } charmiwen[8]; for(i=0;i<8;i++) { str[i]=0; if(charB[i][0]==1) str[i]=str[i]+128; if(charB[i][1]==1) str[i]=str[i]+64; if(charB[i][2]==1) str[i]=str[i]+32; if(charB[i][3]==1) str[i]=str[i]+16; if(charB[i][4]==1) str[i]=str[i]+8; if(charB[i][5]==1) str[i]=str[i]+4; if(charB[i][6]==1) str[i]=str[i]+2; if(charB[i][7]==1) str[i]=str[i]+1; } m_outputMiwen=""; for(i=0;i<8;i++) miwen[i]=str[i]; //至此,得到密文miwen[8] miwen[i]='\0'; m_outputMiwen=miwen; CStringtemp1,temp2,temp3; char*ch1,*ch2,*ch3; for(i=0;i<16;i++) { intm=m_output.InsertItem(0,""); charchtempL[40]="\0",chtempkey[55]="\0",chtempR[40]="\0",number[4]="\0"; intctempL[32],ctempkey[48],ctempR[32]; for(j=0;j<32;j++) { ctempL[j]=L[i][j]; ctempR[j]=R[i][j]; } for(j=0;j<48;j++) ctempkey[j]=keys[i][j]; for(j=0;j<32;j++) { temp1.Format("%d",ctempL[j]); ch1=temp1.GetBuffer(temp1.GetLength()); strcat(chtempL,ch1); if((j+1)%8==0) strcat(chtempL,""); temp2.Format("%d",ctempR[j]); ch2=temp2.GetBuffer(temp2.GetLength()); strcat(chtempR,ch2); if((j+1)%8==0) strcat(chtempR,""); } for(j=0;j<48;j++) { temp3.Format("%d",ctempkey[j]); ch3=temp3.GetBuffer(temp3.GetLength()); strcat(chtempkey,ch3); if((j+1)%8==0) strcat(chtempkey,""); } _itoa(i+1,number,10); m_output.SetItemText(m,0,number); m_output.SetItemText(m,1,chtempkey); m_output.SetItemText(m,2,chtempL); m_output.SetItemText(m,3,chtempR); } UpdateData(false);}2、解密過(guò)程(JieMi.cpp)//JieMi.cpp:implementationfile#include"stdafx.h"#include"DES.h"#include"JieMi.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif#include"DESDlg.h"http://JieMidialogJieMi::JieMi(CWnd*pParent/*=NULL*/) :CDialog(JieMi::IDD,pParent){ //{{AFX_DATA_INIT(JieMi) m_Mingwen=_T(""); m_Miwen=_T(""); m_Miyao=_T(""); m_outputMingwen=_T(""); //}}AFX_DATA_INIT}voidJieMi::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(JieMi) DDX_Control(pDX,IDC_LIST1,m_output); DDX_Text(pDX,IDC_Mingwen,m_Mingwen); DDX_Text(pDX,IDC_Miwen,m_Miwen); DDX_Text(pDX,IDC_Miyao,m_Miyao); DDX_Text(pDX,IDC_outMingwen,m_outputMingwen); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(JieMi,CDialog) //{{AFX_MSG_MAP(JieMi) ON_BN_CLICKED(IDC_back,Onback) ON_BN_CLICKED(IDC_JieMi,OnJieMi) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//JieMimessagehandlersBOOLJieMi::OnInitDialog(){ CDialog::OnInitDialog(); m_output.ModifyStyle(0,LVS_REPORT); DWORDstyle=m_output.GetExStyle(); style=style^LVS_EX_CHECKBOXES; m_output.SetExtendedStyle(style|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_output.InsertColumn(0,"循環(huán)輪數(shù)",LVCFMT_LEFT,80); m_output.InsertColumn(1,"子密鑰",LVCFMT_LEFT,450); m_output.InsertColumn(2,"左部(Li)",LVCFMT_LEFT,350); m_output.InsertColumn(3,"右部(Ri)",LVCFMT_LEFT,350); //TODO:Addextrainitializationhere returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidJieMi::Onback(){ //TODO:Addyourcontrolnotificationhandlercodehere ShowWindow(SW_HIDE); CDESDlgdlg; dlg.DoModal();}voidJieMi::OnJieMi(){ //TODO:Addyourcontrolnotificationhandlercodehere FILE*fp1,*fp2; inti,j,k; intstr[8]; charmiwen[8],miyao[8]; //存儲(chǔ)從文件中讀取的明文和密鑰 intmiwenB[64],miyaoB[64]; //存儲(chǔ)64位二進(jìn)制的明文和密鑰 fp1=fopen("data.txt","r"); fp2=fopen("miyao.txt","r"); if(fp1==NULL||fp2==NULL) { MessageBox("明文和密鑰文件打開(kāi)失敗!"); return; } for(i=0;i<8;i++) { fscanf(fp1,"%c",&miwen[i]); fscanf(fp2,"%c",&miyao[i]); } fclose(fp1); fclose(fp2); FILE*fp4,*fp5; charch; fp4=fopen("密文二進(jìn)制.txt","w"); fp5=fopen("密鑰二進(jìn)制.txt","w"); k=0; for(i=0;i<8;i++) { ch=miwen[i]; for(j=0;j<8;j++) { str[j]=ch%2; ch=ch/2; } for(j=7;j>=0;j--) { miwenB[k]=str[j]; k++; fprintf(fp4,"%d",str[j]); } } fclose(fp4); k=0; for(i=0;i<8;i++) { ch=miyao[i]; for(j=0;j<8;j++) { str[j]=ch%2; ch=ch/2; } for(j=7;j>=0;j--) { miyaoB[k]=str[j]; k++; fprintf(fp5,"%d",str[j]); } } fclose(fp5); charMiwentemp[75]="\0",Miyaotemp[75]="\0"; CStringtemp1; char*cha; for(i=0;i<64;i++) { temp1.Format("%d",miwenB[i]); cha=temp1.GetBuffer(temp1.GetLength()); strcat(Miwentemp,cha); if((i+1)%8==0) strcat(Miwentemp,""); } m_Miwen=Miwentemp; //二進(jìn)制密文顯示在界面上 for(i=0;i<64;i++) { temp1.Format("%d",miyaoB[i]); cha=temp1.GetBuffer(temp1.GetLength()); strcat(Miyaotemp,cha); if((i+1)%8==0) strcat(Miyaotemp,""); } m_Miyao=Miyaotemp; //二進(jìn)制密鑰顯示在界面上/*密鑰的生成*/ intpc_1table[56]={ //pc_1置換表 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}; intpc_2table[48]={ //pc_2置換表 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}; intafterpc_1[56];/*經(jīng)過(guò)pc_1置換*/ for(i=0;i<56;i++) afterpc_1[i]=miyaoB[pc_1table[i]-1]; /*密鑰第0次分組*/ intC0[28],D0[28]; for(i=0;i<28;i++) C0[i]=afterpc_1[i]; for(j=0,i=28;i<56;i++,j++) D0[j]=afterpc_1[i];/*十六輪子密鑰產(chǎn)生前的中間數(shù)據(jù),左移產(chǎn)生的C[16][28],D[16][28]*/ intC[16][28],D[16][28]; for(i=0;i<27;i++) //第一輪數(shù)據(jù)生成C[0][28]與D[0][28] { C[0][i]=C0[i+1]; D[0][i]=D0[i+1]; } C[0][27]=C0[0]; D[0][27]=D0[0]; for(i=1;i<16;i++) //第二輪數(shù)據(jù)至第十六輪數(shù)據(jù)生成 { if(i==1||i==8||i==15) { for(j=0;j<27;j++) //左移1位 { C[i][j]=C[i-1][j+1]; D[i][j]=D[i-1][j+1]; } C[i][27]=C[i-1][0]; D[i][27]=D[i-1][0]; } else //左移2位 { for(j=0;j<26;j++) { C[i][j]=C[i-1][j+2]; D[i][j]=D[i-1][j+2]; } C[i][26]=C[i-1][0]; C[i][27]=C[i-1][1]; D[i][26]=D[i-1][0]; D[i][27]=D[i-1][1]; } } /*十六輪子密鑰初始數(shù)據(jù)合并,為pc_2置換生成子密鑰做準(zhǔn)備*/ intbeforekey[16][56]; k=0; for(i=0;i<16;i++) { for(j=0;j<28;j++) beforekey[i][j]=C[i][j]; for(k=0;k<28;k++,j++) beforekey[i][j]=D[i][k]; }/*beforekey[16][56]經(jīng)過(guò)pc_2置換,生成16輪子密鑰key[16][48]*/ intkeys[16][48]; for(i=0;i<16;i++) for(j=0;j<48;j++) keys[i][j]=beforekey[i][pc_2table[j]-1];/*初始置換IP*/ intIP_table[64]={ 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7}; intafterIP[64]; for(i=0;i<64;i++) { afterIP[i]=miwenB[IP_table[i]-1]; } /*明文的第零次分組,L0[32],R0[32]*/ intL0[32],R0[32]; for(i=0;i<32;i++) L0[i]=afterIP[i]; for(j=0,i=32;i<64;i++,j++) R0[j]=afterIP[i]; /*十六輪循環(huán)生成密文,首先是L[16][32]和R[16][32]的生成*/ intL[16][32],R[16][32]; intE_table[48]={ 32,1,2,3,4,5, 4,5,6,7,8,9, 8,9,10,11,12,13, 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,31}; intafterER0[48],beforeS[48]; for(i=0;i<32;i++) //Li=R(i-1) L[0][i]=R0[i]; for(i=0;i<48;i++) //E置換,生成48位數(shù)據(jù),與第十五輪子密鑰進(jìn)行異或,為進(jìn)入S盒做準(zhǔn)備 afterER0[i]=R0[E_table[i]-1]; for(i=0;i<48;i++) if(afterER0[i]==keys[15][i]) beforeS[i]=0; else beforeS[i]=1;/*將beforeS[48]分在8個(gè)數(shù)組中,為經(jīng)過(guò)8個(gè)S盒準(zhǔn)備*/ intbeforeSBox[8][6]; k=0; for(i=0;i<8;i++) for(j=0;j<6;j++) { beforeSBox[i][j]=beforeS[k]; k++; }/*S盒變換,48位數(shù)據(jù)生成32位數(shù)據(jù)*/ intafterSBox[8]; intSBox[8][4][16]={ //S盒變換表 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, 15,1,8,14,6,11,3,4,9,7,2,13,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, 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, 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, 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,2,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, 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, 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, 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}; inthang,lie; for(i=0;i<8;i++) {

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論