SDES加密算法源代碼C++語言_第1頁
SDES加密算法源代碼C++語言_第2頁
SDES加密算法源代碼C++語言_第3頁
SDES加密算法源代碼C++語言_第4頁
SDES加密算法源代碼C++語言_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

#include<iostream>usingnamespacestd;int*out;//用于函數(shù)中返回結(jié)果的指針,如果寫在函數(shù)中會被銷毀,得不到返回的指針intKey[10];//10位密鑰intsubKey1[8],subKey2[8];//兩個8位的子密鑰intplaintext[8];//8位明文intS0[4][4]={{1,0,3,2},{3,2,1,0},{0,2,1,3},{3,1,3,2}};//S0盒子intS1[4][4]={{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}};//S1盒子//生成子密鑰的函數(shù)voidcreateSubKey(){intbuff[10];buff[0]=Key[2];buff[1]=Key[4];buff[2]=Key[1];buff[3]=Key[6];buff[4]=Key[3];buff[5]=Key[9];buff[6]=Key[0];buff[7]=Key[8];buff[8]=Key[7];buff[9]=Key[5];for(inti=0;i<10;i++){Key[i]=buff[i];}/*左邊5位LS-1置換*/inttemp=buff[0];for(inti=1;i<5;i++){buff[i-1]=buff[i];}buff[4]=temp;/*右邊5位LS-1置換*/for(inti=6;i<10;i++){buff[i-1]=buff[i];)buff[9]=temp;/*將結(jié)果寫入subKey1*/subKey1[0]=buff[5];subKey1[1]=buff[2];subKey1[2]=buff[6];subKey1[3]=buff[3];subKey1[4]=buff[7];subKey1[5]=buff[4];subKey1[6]=buff[9];subKey1[7]=buff[8];/*左邊5位LS-2置換*/temp=buff[0];inttemp2=buff[1];for(inti=2;i<5;i++){buff[i-2]=buff[i];)buff[3]=temp;buff[4]=temp2;/*右邊5位LS-2置換*/temp=buff[5];temp2=buff[6];for(inti=7;i<10;i++){buff[i-2]=buff[i];)buff[8]=temp;buff[9]=temp2;/*將結(jié)果寫入subKey2*/subKey2[0]=buff[5];subKey2[1]=buff[2];subKey2[2]=buff[6];subKey2[3]=buff[3];subKey2[4]=buff[7];subKey2[5]=buff[4];subKey2[6]=buff[9];subKey2[7]=buff[8];)//IP置換int*IP(int*p){out=newint[8];TOC\o"1-5"\h\zout[0]=p[1];out[1]=p[5];out[2]=p[2];out[3]=p[0];out[4]=p[3];out[5]=p[7];out[6]=p[4];out[7]=p[6];returnout;)//FP置換(IP的逆置換)int*FP(int*p){out=newint[8];TOC\o"1-5"\h\zout[0]=p[3];out[1]=p[0];out[2]=p[2];out[3]=p[4];out[4]=p[6];out[5]=p[1];out[6]=p[7];out[7]=p[5];returnout;)//異或操作intXORQnta,intb){if(a!=b)return1;elsereturn0;)//F操作int*F(int*Rint*sk){intbuff[8];//E/P操作TOC\o"1-5"\h\zbuff[0]=R[3];buff[1]=R[0];buff[2]=R[1];buff[3]=R[2];buff[4]=R[1];buff[5]=R[2];buff[6]=R[3];buff[7]=R[0];//與子密鑰異或for(inti=0;i<8;i++)buff[i]=XOR(buff[i],sk[i]);//S盒子操作introw,col;if(buff[0]==0){if(buff[3]==0)row=0;elserow=1;}else{if(buff[3]==0)row=2;elserow=3;}if(buff[1]==0)col=0;elsecol=2;if(buff[2]!=0)col=col+1;/*S0盒子輸出*/intout1=S0[row][col];if(buff[4]==0){if(buff[7]==0)row=0;elserow=1;}else{if(buff[7]==0)row=2;elserow=3;}if(buff[5]==0)col=0;elsecol=2;if(buff[6]!=0)col=col+1;/*S1盒子輸出*/

intout2=S1[row][col];out=newint[4];if(outl==0||outl==1)out[0]=0;elseout[0]=1;if(out1==1||out1==3)out[1]=1;elseout[1]=0;if(out2==0||out2==1)out[2]=0;elseout[2]=1;if(out2==1||out2==3)out[3]=1;elseout[3]=0;//置換P4buff[0]=out[1];buff[1]=out[3];buff[2]=out[2];buff[3]=out[0];for(inti=0;i<4;i++)out[i]=buff[i];returnout;}//fk操作int*Fk(int*L,int*R){//L異或F(R,SK)//L異或F(R,SK)//L異或F(R,SK)for(inti=0;i<4;i++)r1[i]=XOR(L[i],r1[i]);int*r2=F(r1,subKey2);for(inti=0;i<4;i++)r2[i]=XOR(R[i],r2[i]);out=newint[8];for(inti=0;i<4;i++)out[i]=r2[i];for(inti=4;i<8;i++)out[i]=r1[i-4];returnout;}//解密的fk操作(調(diào)換了子密鑰的順序)int*Fk2(int*L,int*R){int*r1=F(R,subKey2);for(inti=0;i<4;i++)r1[i]=XOR(L[i],r1[i]);int*r2=F(r1,subKey1);for(inti=0;i<4;i++)r2[i]=XOR(R[i],r2[i]);out=newint[8];for(inti=0;i<4;i++)out[i]=r2[i];for(inti=4;i<8;i++)out[i]=r1[i-4];returnout;)intmain(){cout<<"請輸入10位密鑰,每位為1或0,用空格分隔(例:1010000010):\n"for(inti=0;i<10;i++){cin>>Key[i];)createSubKey();cout<<"子密鑰1:\t";for(inti=0;i<8;i++){cout<<subKey1[i];)cout<<"\t";cout<<"子密鑰2:\t";for(inti=0;i<8;i++){cout<<subKey2[i];)cout<<"\n請輸入8位明文,每位為1或0,用空格分隔(例:10111101):\n";for(inti=0;i<8;i++){cin>>plaintext[i];)int*s;s=IP(plaintext);intL[4];for(inti=0;i<4;i++)L[i]=s[i];intR[4];for(inti=4;i<8;i++)R[i-4]=s[i];s=Fk(L,R);s=FP(s);/*inta[4]={1,0,0,1};intb[8]={1,0,0,1,1,0,0,1};s=F(a,b);*/cout<<"加密后的密文如下:\n";for(inti=0;

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論