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

下載本文檔

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

文檔簡介

軟件實現(xiàn)流程圖節(jié)點1節(jié)點1加密過程64位明文進行IP置換后進行分組Li[32]與Ri[32];i=0Ri[32]進行E擴展,生成48位比特串。48位比特串與子密鑰keys[i+1]進行異或運算。得到的48位比特串分為8組,進入8個S盒中,并按照S盒的規(guī)則輸出8個十進制數(shù)將8個十進制數(shù)轉(zhuǎn)換為32位比特串。節(jié)點132位比特串進行P置換,產(chǎn)生新的32位比特串32位比特串與Li[32]進行異或,產(chǎn)生R(i+1)[32]L(i+1)[32]=Ri[32];i++R16[32]在前,L16[32]在后進行合并,合并后進行IP逆置換,即產(chǎn)生密文i>15NY結(jié)束開始輸入密文和密鑰密文和密鑰轉(zhuǎn)換成二進制,存儲在文件中讀出64位密文和密鑰64位密鑰進行pc-1置換,生成56位C[i+1]與D[i+1]合并為56位比特串,并進行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é)點1節(jié)點1加密過程64位明文進行IP置換后進行分組Li[32]與Ri[32];i=0Ri[32]進行E擴展,生成48位比特串。48位比特串與子密鑰keys[i+1]進行異或運算。得到的48位比特串分為8組,進入8個S盒中,并按照S盒的規(guī)則輸出8個十進制數(shù)將8個十進制數(shù)轉(zhuǎn)換為32位比特串。節(jié)點132位比特串進行P置換,產(chǎn)生新的32位比特串32位比特串與Li[32]進行異或,產(chǎn)生R(i+1)[32]L(i+1)[32]=Ri[32];i++R16[32]在前,L16[32]在后進行合并,合并后進行IP逆置換,即產(chǎn)生密文i>15NY結(jié)束開始輸入密文和密鑰密文和密鑰轉(zhuǎn)換成二進制,存儲在文件中讀出64位密文和密鑰64位密鑰進行pc-1置換,生成56位C[i+1]與D[i+1]合并為56位比特串,并進行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二、標準DES的加密過程1、明文與密鑰的輸入 首先8位ACSII字符的明文與密鑰的輸入,存放在mingwen[8]和miyao[8]中,然后將這些8位的ASCII字符轉(zhuǎn)換成二進制的64位的明文和密鑰,分別存放在mingwenB[64]和miyaoB[64]中,并將二進制的明文和密鑰放在文件中 intstr[8],i,j,ch,k; FILE*fp4;fp4=fopen("明文二進制.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)換和存儲同理。2、密鑰的產(chǎn)生 1)、64位miyaoB[64]經(jīng)過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]進行左移,產(chǎn)生C[16][28]和D[16][28],為進行pc-2置換產(chǎ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置換準備。 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)過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)過初始置換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)生密文,要進行16輪的循環(huán),每次循環(huán)生成一個L[i][32]和R[i][32],下面進行第一次循環(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])。因此,要首先計算出f值。R0[32]經(jīng)過E變換,由32位擴展為48位,然后與子密鑰進行異或,為進入S盒做準備。結(jié)果放在afterER0[48]中 for(i=0;i<48;i++) afterER0[i]=R0[E_table[i]-1]; 5)、E擴展后,與子密鑰進行異或,生成進入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)、要進入S盒的48位比特串要經(jīng)過8個不同的S盒,因此,將48位比特串分在8個數(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)、進入S盒后,進過8個S盒,每個S盒產(chǎn)生一個十進制的數(shù)字,在0~15之間。beforeSBox[i][6]中的6個數(shù)字,第0、5位組成了S盒的行號,第1、2、3、4,4位組成了S盒的列號,根據(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盒出來的8個十進制數(shù)字轉(zhuǎn)換成32位的二進制比特串,存放在beroreP[32]中,為接下來的P置換做準備。 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)換為二進制的32位比特串進行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)、對于剩下的15輪循環(huán),用一個循環(huán)語句進行控制,生成余下的15輪中間數(shù)據(jù)的左部和右部,最后產(chǎn)生L[15][32]和R[15][32]。 11)、得到的最后一輪左部32位比特串和右部32位比特串進行合并,但是,合并的時候,右部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ù)合并后的比特串進行最后的逆置換,生成64位的二進制密文。存放在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]三、標準DES的解密過程 解密與加密的過程幾乎完全相同,唯一不同的地方是:在進行E擴展后要與子密鑰進行異或的時候,第一輪要與第十六輪子密鑰進行異或。依次類推,第十六輪要與第一輪子密鑰進行異或。因此對于DES的解密過程就不再細說。程序運行結(jié)果截圖1、初始界面,界面的初始化輸入的明文/密文是“20082374”2、點擊加密:進入加密界面,在這個界面里顯示加密過程中的所有細節(jié),包括循環(huán)的次數(shù),每輪循環(huán)的子密鑰、左右部數(shù)據(jù)。3、再次點擊加密按鈕,進行數(shù)據(jù)的加密,64位的明文經(jīng)過加密生成64位密文,“64位明文:”是輸入的8位明文的二進制表示?!?4位密鑰:”是輸入的8位密鑰的二進制表示?!?4位密文:”是經(jīng)過加密之后產(chǎn)生的密文?!把h(huán)輪數(shù)”是記錄十六輪循環(huán)的次數(shù)?!白用荑€”記錄每次循環(huán)的時候與R(i-1)進行異或的48位子密鑰。“左部(Li)”指的是每次循環(huán)生成的Li,左部32位比特串。“右部(Ri)”指的是每次循環(huán)產(chǎn)生的右部Ri,32位比特串。4、點擊返回按鈕,返回主界面。5、點擊解密按鈕,進入解密界面,在這個界面里顯示了解密過程中的所有細節(jié),包括循環(huán)的次數(shù),每輪循環(huán)的子密鑰、左右部數(shù)據(jù)。6、點擊解密按鈕,進行數(shù)據(jù)的加密,64位的密文經(jīng)過解密生成64位的明文,“64位密文:”是輸入的8位密文的二進制表示?!?4位密鑰:”是輸入的8位密鑰的二進制表示。“64位明文:”是經(jīng)過解密之后產(chǎn)生的明文?!把h(huán)輪數(shù)”是記錄十六輪循環(huán)的次數(shù)。“子密鑰”記錄每次循環(huán)的時候與R(i-1)進行異或的48位子密鑰。“左部(Li)”指的是每次循環(huán)生成的Li,左部32位比特串?!坝也浚≧i)”指的是每次循環(huán)產(chǎn)生的右部Ri,32位比特串。7、點擊返回按鈕,返回主界面8、點擊退出按鈕,退出程序,程序結(jié)束。

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

核心源代碼1、加密過程(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)換成二進制并顯示*/ FILE*fp1,*fp2; inti,j,k; intstr[8]; charmingwen[8],miyao[8]; //存儲從文件中讀取的明文和密鑰 intmingwenB[64],miyaoB[64]; //存儲64位二進制的明文和密鑰 fp1=fopen("data.txt","r"); fp2=fopen("miyao.txt","r"); if(fp1==NULL||fp2==NULL) { MessageBox("明文和密鑰文件打開失敗!"); 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("明文二進制.txt","w"); fp5=fopen("密鑰二進制.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++) //二進制明文顯示在界面上 { 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++) //二進制密鑰顯示在界面上 { 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)過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置換生成子密鑰做準備*/ 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)過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ù),與子密鑰進行異或,為進入S盒做準備 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個數(shù)組中,為經(jīng)過8個S盒準備*/ 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盒中出來的8個十進制數(shù)字轉(zhuǎn)換成32位的二進制數(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位的二進制數(shù)進行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]進行異或,得到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],下面進行十五輪循環(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++) //與子密鑰進行異或 { if(afterER[i][j]==keys[i][j]) beforeS[j]=0; else beforeS[j]=1; } k=0; for(j=0;j<8;j++) //生成進入S盒錢的8個數(shù)組,分別進入8個S盒 for(n=0;n<6;n++) { beforeSBox[j][n]=beforeS[k]; k++; } for(j=0;j<8;j++) //進入S盒,從8個S盒中生成8個數(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盒出來的8個十進制數(shù)轉(zhuǎn)換成32位的二進制數(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; }/*通過十五輪循環(huán),最后得到L[15][32]和R[15][32],合并之后進行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位二進制密文輸出到界面上 { m_Miwen=m_Miwen+(char)(48+output[i]); if((i+1)%8==0) m_Miwen=m_Miwen+""; }/*將output[64]二進制密文轉(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、解密過程(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]; //存儲從文件中讀取的明文和密鑰 intmiwenB[64],miyaoB[64]; //存儲64位二進制的明文和密鑰 fp1=fopen("data.txt","r"); fp2=fopen("miyao.txt","r"); if(fp1==NULL||fp2==NULL) { MessageBox("明文和密鑰文件打開失敗!"); 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("密文二進制.txt","w"); fp5=fopen("密鑰二進制.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; //二進制密文顯示在界面上 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; //二進制密鑰顯示在界面上/*密鑰的生成*/ 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)過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置換生成子密鑰做準備*/ 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)過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ù),與第十五輪子密鑰進行異或,為進入S盒做準備 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個數(shù)組中,為經(jīng)過8個S盒準備*/ 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論