资源描述:
《SDES加密算法源代码(C++语言)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#includeusingnamespacestd;int*out;//用于函数中返回结果的指针,如果写在函数中会被销毁,得不到返回的指针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盒子//生成
2、子密钥的函数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
3、[i-1]=buff[i];}buff[4]=temp;/*右边5位LS-1置换*/temp=buff[5];for(inti=6;i<10;i++){buff[i-1]=buff[i];}buff[9]=temp;/*将结果写入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];/*
4、左边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;/*将结果写入subKey2*/subKey2[0]=buff[5];subKey2[1]=buff[2];subKey2[
5、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];out[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){ou
6、t=newint[8];out[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;}//异或操作intXOR(inta,intb){if(a!=b)return1;elsereturn0;}//F操作int*F(int*R,int*sk){intbuff[8];//E/P操作buff[0]=R[3];buff[1]=R[0];buff[2]=R[1];buff[3]=R[2];buff[4]=R[1
7、];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
8、];if(buff[4]==0){if(buff[7]==0)row=0;elserow=1;}else{i