![實現(xiàn)DES-分組密碼算法的加解密_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/32f598ee-6199-4fc7-9a2b-70eb32f151ad/32f598ee-6199-4fc7-9a2b-70eb32f151ad1.gif)
![實現(xiàn)DES-分組密碼算法的加解密_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/32f598ee-6199-4fc7-9a2b-70eb32f151ad/32f598ee-6199-4fc7-9a2b-70eb32f151ad2.gif)
![實現(xiàn)DES-分組密碼算法的加解密_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/32f598ee-6199-4fc7-9a2b-70eb32f151ad/32f598ee-6199-4fc7-9a2b-70eb32f151ad3.gif)
![實現(xiàn)DES-分組密碼算法的加解密_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/32f598ee-6199-4fc7-9a2b-70eb32f151ad/32f598ee-6199-4fc7-9a2b-70eb32f151ad4.gif)
![實現(xiàn)DES-分組密碼算法的加解密_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/32f598ee-6199-4fc7-9a2b-70eb32f151ad/32f598ee-6199-4fc7-9a2b-70eb32f151ad5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實 驗 報 告課程:密碼學(xué) 班級: 姓名: 學(xué)號:成績: 指導(dǎo)教師: 實驗日期:2011/5/25實驗密級: 預(yù)習(xí)程度: 實驗時間:12:50-15:20儀器組次: 18 必修/選修:必修 實驗序號:4實驗名稱: 實現(xiàn)DES 分組密碼算法的加解密 實驗?zāi)康呐c要求:1、掌握DES 分組密碼算法的軟件實現(xiàn)方法;2、復(fù)習(xí)DES 分組密碼算法設(shè)計的基本原理;3、能用DES 分組密碼算法實現(xiàn)已知明文的加解密 實驗儀器:名稱型號數(shù)量計算機(jī)Lenovo1一、 實驗要求1、求主密鑰的擴(kuò)展密鑰前,先輸出使用的PC-1 置換和PC-2 置換;2、對明/密文文件用DES 算法進(jìn)行加/解密前,先輸出確定使用的S 盒和
2、有關(guān)置換表;3、“確定主密鑰的擴(kuò)展密鑰”和“對明/密文文件的加/解密”分別編寫兩個模塊,如果時間不夠,可以任選一個模塊;4、確定擴(kuò)展密鑰前,先指出是加密密鑰還是解密密鑰;5、密鑰擴(kuò)展的移位的位數(shù)可以先添表,但最后一輪移位完后,必須回到初始值c0d0。6、主密鑰長度與明文相一致,需要忽略校驗位;7、能完成任意給定的一個明/密文文件的加/解密;8、加解密結(jié)果正確。二、實驗內(nèi)容與步驟下面是程序的部分代碼int main() char MingWen104; char target8; char InputKey8; int text64; int text_ip64; int L032,Li32;
3、int R032,Ri32;int RE048; int key64; int keyPC156; int A28; int B28;int keyAB56; int K1648; int RK48; int RKS8; int SP32; int RKSP32; int text_end64; int text_out1464; char init9="HTmadeit" int CBC64;int result1364;int H208;char MiWen208;int C832;int M138;char choice;int t;int i,j;int k,l,m
4、,n;int r8,c8;int flag=1;printf("歡迎使用DES加密解密nn");while(flag)printf("A加密,B解密,請選擇:n");scanf("%c",&choice);while(choice!='A'&&choice!='B'&&choice!='a'&&choice!='b')printf("對不起,您的輸入不合法。請選擇A或B,A表示加密,B表示解密。n"
5、;); scanf("%c",&choice);getchar(); printf("請輸入8位密鑰:n");gets(InputKey);while(InputKey7='0'|InputKey8!='0') printf("您輸入的密鑰位數(shù)有誤,請重新輸入8位密鑰:n"); gets(InputKey);for(i=0;i<8;i+) int a8=0,0,0,0,0,0,0,0; m=InputKeyi; for(j=0;m!=0;j+) aj=m%2; m=m/2; for(j=0
6、;j<8;j+) key(i*8)+j=a7-j;for(i=0;i<56;i+) keyPC1i=keyPC1i-1; for(i=0;i<28;i+) Ai=keyPC1i; Bi=keyPC1i+28; for(t=0;t<16;t+) if(movet=1) n=A0; for(i=0;i<27;i+) Ai=Ai+1; A27=n; n=B0; for(i=0;i<28;i+) else for(i=0;i<8;i+) targeti=MingWeni+(8*l); for(i=0;i<8;i+) int a8=0,0,0,0,0,0,
7、0,0; m=targeti; for(j=0;m!=0;j+) aj=m%2; m=m/2; for(j=0;j<8;j+) text(i*8)+j=a7-j; /for(i=0;i<64;i+) /printf("%d,",texti); /printf("n"); /for(i=0;i<64;i+) /printf("%d,",text_outli); /printf("n"); for(i=0;i<64;i+) /CBC模式下前一分組的密文異或當(dāng)前分組 texti=text_outl
8、itexti; /for(i=0;i<64;i+) /printf("%d,",texti); /printf("n"); /對每個text進(jìn)行DES加密 for(i=0;i<64;i+) /進(jìn)行初始換位 text_ipi=textIPi-1; for(i=0;i<32;i+) /分成左右兩部分,各32位 L0i=text_ipi; R0i=text_ipi+32; /for(i=0;i<32;i+) / printf("%d,",L0i); /for(i=0;i<32;i+) / printf(&quo
9、t;%d,",R0i); /十六次迭代 for(t=0;t<16;t+) for(i=0;i<48;i+) /將右半部分通過擴(kuò)展換位表E從32位擴(kuò)展成48位 RE0i=R0Ei-1; /printf("RE0n"); /for(i=0;i<48;i+) /printf("%d,",RE0i); for(i=0;i<48;i+) /RE與K異或運(yùn)算 RKi=RE0iKti; /printf("n"); /for(i=0;i<48;i+) /printf("%d,",RKi);
10、for(i=0;i<8;i+) /將R和K異或運(yùn)算的結(jié)果通過S位移表 ri=RK(i*6)+0*2+RK(i*6)+5; ci=RK(i*6)+1*8+RK(i*6)+2*4+RK(i*6)+3*2+RK(i*6)+4; RKS0=S1r0c0; RKS1=S2r1c1; RKS2=S3r2c2; RKS3=S4r3c3; RKS4=S5r4c4; RKS5=S6r5c5; RKS6=S7r6c6; RKS7=S8r7c7; for(i=0;i<8;i+) /把結(jié)果轉(zhuǎn)成32位二進(jìn)制儲存在數(shù)組SP中 int b4=0,0,0,0; m=RKSi; for(j=3;m!=0;j-) b
11、j=m%2; m=m/2; for(j=0;j<4;j+) SPj+(i*4)=bj; for(i=0;i<32;i+) /將二進(jìn)制結(jié)果再經(jīng)過一個P盒換位 RKSPi=SPPi-1; for(i=0;i<32;i+) /與前一次的左部異或運(yùn)算,得到本次迭代的右部 Rii=L0iRKSPi; for(i=0;i<32;i+) L0i=R0i; R0i=Rii; else if(choice='B'|choice='b') printf("請輸入密文內(nèi)容:n"); gets(MiWen); for(i=0;i<208
12、;i+) Hi=0; for(i=0;MiWeni!='0'i+) /將十六進(jìn)制密文轉(zhuǎn)化成十進(jìn)制存放在數(shù)組H中 if(MiWeni>='0'&&MiWeni<='9') Hi=MiWeni-'0' else if(MiWeni>='A'&&MiWeni<='F') Hi=MiWeni-'A'+10; else if(MiWeni>='a'&&MiWeni<='f') H
13、i=MiWeni-'a'+10; else printf("請輸入用十六進(jìn)制表示的密文內(nèi)容:n"); gets(MiWen); i=0; n=i; /密文中共有n個字符 if(n%16!=0) printf("對不起,您輸入的密文不正確,請確認(rèn)密文的內(nèi)容,密文的字符數(shù)應(yīng)是16的倍數(shù)。n"); printf("請輸入密文內(nèi)容:n"); gets(MiWen); for(i=0;i<208;i+) Hi=0; for(i=0;MiWeni!='0'i+) /將十六進(jìn)制密文轉(zhuǎn)化成十進(jìn)制存放在數(shù)組H中 i
14、f(MiWeni>='0'&&MiWeni<='9') Hi=MiWeni-'0' else if(MiWeni>='A'&&MiWeni<='F') Hi=MiWeni-'A'+10; else if(MiWeni>='a'&&MiWeni<='f') Hi=MiWeni-'a'+10; for(i=0;i<n;i+) /將十進(jìn)制密文轉(zhuǎn)化成二進(jìn)制存放在數(shù)組C中
15、int he4=0,0,0,0; for(j=3;Hi!=0;j-) hej=Hi%2; Hi=Hi/2; for(j=0;j<4;j+) Cj+(i*4)=hej; /for(i=0;i<130;i+) / printf("%d,",Ci); /printf("n"); k=n/16; for(l=0;l<k;l+) for(i=0;i<64;i+) /將每個分組對應(yīng)的64位二進(jìn)制密文放到text_out中 text_outl+1i=Ci+(l*64); /for(i=0;i<64;i+) / printf("%
16、d,",text_outli); /printf("n"); /對每個text進(jìn)行DES解密 for(i=0;i<64;i+) /進(jìn)行初始換位 text_ipi=text_outl+1IPi-1; /for(i=0;i<64;i+) /printf("%d,",text_ipi); /printf("n"); for(i=0;i<32;i+) /分成左右兩部分,各32位 L0i=text_ipi; R0i=text_ipi+32; /for(i=0;i<32;i+) / printf("%d
17、,",L0i); /for(i=0;i<32;i+) / printf("%d,",R0i); /CBC模式下的解密 for(i=0;i<64;i+) /前一分組的密文異或當(dāng)前分組所得明文的二進(jìn)制放到result中 resultli=text_outlitexti; for(i=0;i<(n/16);i+) /將二進(jìn)制轉(zhuǎn)成十進(jìn)制 for(j=0;j<8;j+) Mij=resulti(j*8)+0*128+resulti(j*8)+1*64+resulti(j*8)+2*32+resulti(j*8)+3*16+resulti(j*8)+4
18、*8+resulti(j*8)+5*4+resulti(j*8)+6*2+resulti(j*8)+7; printf("您的文件經(jīng)過DES解密后的明文是:n"); for(i=0;i<(n/16);i+) for(j=0;j<8;j+) printf("%c",Mij); printf("nnn"); flag=0;printf("是否繼續(xù)?n");printf("Y繼續(xù),N退出,請選擇:n");scanf("%c",&choice);while(choice!='Y'&&choice!='N'&&choice!='y'&&choice!='n')printf("對不起,您的輸入不合法。請選擇Y或N,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年常年管理咨詢委托合同協(xié)議
- 籃球場申請書
- 知識產(chǎn)權(quán)的維護(hù)與商業(yè)化運(yùn)作探討
- 電子銀行系統(tǒng)風(fēng)險控制與用戶體驗優(yōu)化
- 成都房屋租賃合同
- 現(xiàn)代企業(yè)中員工晉升機(jī)制的研究與實踐
- 主管轉(zhuǎn)正申請書
- 電影產(chǎn)業(yè)發(fā)展對經(jīng)濟(jì)的影響及展望
- 2025年住房購回協(xié)議
- 中國APP營銷市場運(yùn)行動態(tài)及行業(yè)投資潛力預(yù)測報告
- 數(shù)字化戰(zhàn)略轉(zhuǎn)型-深度研究
- 蘇北四市(徐州、宿遷、淮安、連云港)2025屆高三第一次調(diào)研考試(一模)生物試卷(含答案)
- 2025江西上饒經(jīng)濟(jì)技術(shù)開發(fā)區(qū)招商集團(tuán)限公司招聘29人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 石油行業(yè)海洋石油勘探與開發(fā)方案
- 監(jiān)察部部長崗位職責(zé)
- 山西省太原市杏花嶺區(qū)年三年級數(shù)學(xué)第一學(xué)期期末考試模擬試題含解析
- 《農(nóng)機(jī)化促進(jìn)法解讀》課件
- 最高法院示范文本發(fā)布版3.4民事起訴狀答辯狀示范文本
- 2023-2024學(xué)年度上期七年級英語期末試題
- 山東工業(yè)職業(yè)學(xué)院《家政職業(yè)經(jīng)理人》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年燃?xì)廨啓C(jī)值班員技能鑒定理論知識考試題庫-下(多選、判斷題)
評論
0/150
提交評論