




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、DES算法的C語言代碼及實現(xiàn)首先新建頭文件des_encode.H內(nèi)容如下:void EncodeMain(); /EncodeMain functionvoid DecodeMain(); /Sorry ,it has not usedvoid Decode(int *str,int *keychar); /decode :input 8 chars,8 keycharsvoid Encode(int *str,int *keychar); /encode: input 8 chars,8 keycharsvoid keyBuild(int *keychar); /create key ar
2、rayvoid StrtoBin(int *midkey,int *keychar); /change into binaryvoid keyCreate(int *midkey2,int movebit,int i); /call by keyBuildvoid EncodeData(int *lData,int *rData,int *srt); /encodedata functionvoid F(int *rData,int *key); /F functionvoid Expand(int *rData,int *rDataP); /Expand functionvoid Excha
3、ngeS(int *rDataP,int *rData); /S-diagram change void ExchangeP(int *rData); /P changevoid FillBin(int *rData,int n,int s); / data to binary;call by S-Diagram change functionvoid DecodeData(int *str,int *lData,int *rData); /DecodeData from binaryint IP1=58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36,
4、28, 20, 12, 4, /initial change62, 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,;int IP2=40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, /opp initial chan
5、ge38, 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;int s416= /S-diagram array14,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,
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
7、,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,
8、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,
9、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;int Ex48= 32,1,2,3,4,5, /Expand array4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,
10、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;int P32=16,7,20,21, /P-change29,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;int PC156=57,49,41,33,25,17,9, /PC-1 in keyBuild1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,4
11、7,39,31,33,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4;int PC248=14,17,11,24,1,5, /PC-2 in keyBuild3,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;再創(chuàng)建des.cpp內(nèi)容如下:#include<stdio.h>#include<string.h>#
12、include"des_encode.h"int key1648;char str8;void main() /main functionEncodeMain();void EncodeMain() /EncodeMain functionint i;char keychar8;int key28;int strkey8;printf("請輸入8個要加密的字符:n");for(i=0;i<8;i+)scanf("%c",&stri);getchar();for(i=0;i<8;i+)strkeyi=stri;pri
13、ntf("n輸入明文的十六進制為:n");for(i=0;i<8;i+)printf("%10x",strkeyi);printf("n請輸入密鑰(8個字符):n");for(i=0;i<8;i+)scanf("%c",&keychari);for(i=0;i<8;i+)key2i=keychari;getchar();/ printf("%c",keychari);Encode(strkey,key2);printf("n加密后十六進制密文是:n"
14、);for(i=0;i<8;i+)printf("%10x",strkeyi);printf("nn清輸入解密密碼n");for(i=0;i<8;i+)scanf("%c",&keychari);for(i=0;i<8;i+)key2i=keychari;Decode(strkey,key2);for(i=0;i<8;i+)printf("%10x",strkeyi);for(i=0;i<8;i+)stri=strkeyi;printf("n明文為:t");
15、for(i=0;i<8;i+)printf("%c",stri);printf("nn");void keyBuild(int *keychar) /create key arrayint i,j;int movebit=1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;int midkey256;int midkey64;StrtoBin(midkey,keychar);for(i=0;i<56;i+)midkey2i=midkeyPC1i-1;for(i=0;i<16;i+)keyCreate(midkey2,move
16、biti,i);void StrtoBin(int *midkey,int *keychar) /change into binaryint trans8,i,j,k,n;n=0;for(i=0;i<8;i+)j=0;while(keychari!=0)transj=keychari%2;keychari=keychari/2;j+;for(k=j;k<8;k+)transk=0;for(k=0;k<8;k+)midkeyn+=trans7-k;void keyCreate(int *midkey2,int movebit,int n)int i,temp4;temp0=mi
17、dkey20;temp1=midkey21;temp2=midkey228;temp3=midkey229;if(movebit=2)for(i=0;i<26;i+)midkey2i=midkey2i+2;midkey2i+28=midkey2i+30;midkey226=temp0;midkey227=temp1;midkey254=temp2;midkey255=temp3; else for(i=0;i<27;i+)midkey2i=midkey2i+1;midkey2i+28=midkey2i+29;midkey227=temp0;midkey255=temp2;for(i
18、=0;i<48;i+)keyni=midkey2PC2i-1;void EncodeData(int *lData,int *rData,int *str) /encodedata functionint i,j,temp8,lint,rint;/int h;int data64;lint=0,rint=0;for(i=0;i<4;i+)j=0;while(stri!=0)tempj=stri%2;stri=stri/2;j+;while(j<8)tempj+=0;for(j=0;j<8;j+)lDatalint+=temp7-j;j=0;while(stri+4!=0
19、)tempj=stri+4%2;stri+4=stri+4/2;j+;while(j<8)tempj+=0;for(j=0;j<8;j+)rDatarint+=temp7-j;for(i=0;i<32;i+)datai=lDatai;datai+32=rDatai;for(i=0;i<32;i+)lDatai=dataIP1i-1;/printf("P1:%5d:%5d,%5dn",IP1i,lDatai,dataIP1i-1);rDatai=dataIP1i+32-1;void F(int *rData,int *key) /F functioni
20、nt i,rDataP48;Expand(rData,rDataP);for(i=0;i<48;i+)rDataPi=rDataPikeyi;/ printf("%10d",rDataPi);if(i+1)%6=0)printf("n");ExchangeS(rDataP,rData);ExchangeP(rData);void Expand(int *rData,int *rDataP) /Expand functionint i;for(i=0;i<48;i+)rDataPi=rDataExi-1;void ExchangeS(int *
21、rDataP,int *rData) /S-diagram changeint i,n,linex,liney;linex=liney=0;for(i=0;i<48;i+=6)n=i/6; /printf("%10dn",(rDataPi<<1);linex=(rDataPi<<1)+rDataPi+5;liney=(rDataPi+1<<3)+(rDataPi+2<<2)+(rDataPi+3<<1)+rDataPi+4;FillBin(rData,n,snlinexliney);void Exchange
22、P(int *rData) /P changeint i,temp32;for(i=0;i<32;i+)tempi=rDatai;for(i=0;i<32;i+)rDatai=tempPi-1;void FillBin(int *rData,int n,int s) / data to binary;call by S-Diagram change functionint temp4,i;for(i=0;i<4;i+)tempi=s%2;s=s/2;for(i=0;i<4;i+)rDatan*4+i=temp3-i;void DecodeData(int *str,int *lData,int *rData) /DecodeData from binaryint i;int a,b;int data64;a=0,b=0;for(i=0;i<32;i+)datai=lDatai;datai+32=rDatai;for(i=0;i<32;i+)lDatai=dataIP2i-1;rDatai=dataIP2i+32-1;for(i=0;i<32;i+)a=(lDatai&0x1)+(a<<1);b=(rDatai&0x1)+(b&
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋泡水改造方案(3篇)
- 農(nóng)村機井改造方案(3篇)
- 透水混凝土配送方案(3篇)
- 民房水電鋪設方案(3篇)
- 河道干旱清淤方案(3篇)
- 廠房監(jiān)控安裝方案(3篇)
- 影樓活動策劃方案(3篇)
- 供電公司-合并方案(3篇)
- 化工項目甲方管理制度
- 客房房門維修方案(3篇)
- 網(wǎng)絡安全技術(shù)實操技能考核試題及答案
- 國家保安員模擬試題及答案(附解析)
- DB31/T 1402-2023養(yǎng)老機構(gòu)認知障礙照護單元設置和服務要求
- 湖南省長沙市師大附中教育集團2025年數(shù)學七下期末綜合測試試題含解析
- 2025年Web應用安全試題及答案解析
- 血管通路介入治療
- 上海市同濟大學第二附屬中學2024-2025學年八年級下冊期末物理試卷
- 2025屆江蘇省南京市、鹽城市高三下學期3月一模政治試題 含解析
- 2025年液壓馬達開發(fā)行業(yè)深度研究報告
- 高速公路養(yǎng)護安全培訓課件
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評價導則
評論
0/150
提交評論