📄 desoper.c
字号:
DesOutBit42=DesInBit27;DesOutBit43=DesInBit30;\
DesOutBit44=DesInBit27;DesOutBit45=DesInBit30;\
DesOutBit46=DesInBit31;DesOutBit47=DesInBit32;\
DesOutBit50=DesInBit33;DesOutBit51=DesInBit34;\
DesOutBit52=DesInBit33;DesOutBit53=DesInBit34;\
DesOutBit54=DesInBit35;DesOutBit55=DesInBit36;\
DesOutBit56=DesInBit37;DesOutBit57=DesInBit00;\
}
/*---*/
#define DesDatBitSwap() {\
\
DesOutBit02=DesInBit00;DesOutBit03=DesInBit05;\
DesOutBit04=DesInBit01;DesOutBit05=DesInBit02;\
DesOutBit06=DesInBit03;DesOutBit07=DesInBit04;\
\
DesOutBit12=DesInBit06;DesOutBit13=DesInBit13;\
DesOutBit14=DesInBit07;DesOutBit15=DesInBit10;\
DesOutBit16=DesInBit11;DesOutBit17=DesInBit12;\
\
DesOutBit22=DesInBit14;DesOutBit23=DesInBit21;\
DesOutBit24=DesInBit15;DesOutBit25=DesInBit16;\
DesOutBit26=DesInBit17;DesOutBit27=DesInBit20;\
\
DesOutBit32=DesInBit22;DesOutBit33=DesInBit27;\
DesOutBit34=DesInBit23;DesOutBit35=DesInBit24;\
DesOutBit36=DesInBit25;DesOutBit37=DesInBit26;\
\
DesOutBit42=DesInBit30;DesOutBit43=DesInBit35;\
DesOutBit44=DesInBit31;DesOutBit45=DesInBit32;\
DesOutBit46=DesInBit33;DesOutBit47=DesInBit34;\
\
DesOutBit52=DesInBit36;DesOutBit53=DesInBit43;\
DesOutBit54=DesInBit37;DesOutBit55=DesInBit40;\
DesOutBit56=DesInBit41;DesOutBit57=DesInBit42;\
\
DesOutBit62=DesInBit44;DesOutBit63=DesInBit51;\
DesOutBit64=DesInBit45;DesOutBit65=DesInBit46;\
DesOutBit66=DesInBit47;DesOutBit67=DesInBit50;\
\
DesOutBit72=DesInBit52;DesOutBit73=DesInBit57;\
DesOutBit74=DesInBit53;DesOutBit75=DesInBit54;\
DesOutBit76=DesInBit55;DesOutBit77=DesInBit56;\
}
/*{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};*/
/*1-8 9-16 17-24 25-32*/
#define DesDat32To32() {\
DesOutBit00=DesInBit17;DesOutBit01=DesInBit06;\
DesOutBit02=DesInBit23;DesOutBit03=DesInBit24;\
DesOutBit04=DesInBit34;DesOutBit05=DesInBit13;\
DesOutBit06=DesInBit33;DesOutBit07=DesInBit20;\
DesOutBit10=DesInBit00;DesOutBit11=DesInBit16;\
DesOutBit12=DesInBit26;DesOutBit13=DesInBit31;\
DesOutBit14=DesInBit04;DesOutBit15=DesInBit21;\
DesOutBit16=DesInBit36;DesOutBit17=DesInBit11;\
DesOutBit20=DesInBit01;DesOutBit21=DesInBit07;\
DesOutBit22=DesInBit27;DesOutBit23=DesInBit15;\
DesOutBit24=DesInBit37;DesOutBit25=DesInBit32;\
DesOutBit26=DesInBit02;DesOutBit27=DesInBit10;\
DesOutBit30=DesInBit22;DesOutBit31=DesInBit14;\
DesOutBit32=DesInBit35;DesOutBit33=DesInBit05;\
DesOutBit34=DesInBit25;DesOutBit35=DesInBit12;\
DesOutBit36=DesInBit03;DesOutBit37=DesInBit30;\
}
/************************************************************/
void DesKeyGroup(unsigned char *pDesKeyIn,unsigned char *pDesKeyOut){
unsigned char i,j,k;
unsigned long t1,t2;
for(i=0;i<8;i++)
DesChangeAreaIn[i]=*(pDesKeyIn+i);
DesKey64To56();/*L 4 bytes=28bits//R 4 bytes=28bit//右对齐*/
DesChangeAreaOut[0]&=0xf;t1=DesChangeAreaOut[0];
t1<<=8;t1+=DesChangeAreaOut[1];
t1<<=8;t1+=DesChangeAreaOut[2];
t1<<=8;t1+=DesChangeAreaOut[3];
DesChangeAreaOut[4]&=0xf;t2=DesChangeAreaOut[4];
t2<<=8;t2+=DesChangeAreaOut[5];
t2<<=8;t2+=DesChangeAreaOut[6];
t2<<=8;t2+=DesChangeAreaOut[7];
for(i=0;i<16;i++){
for(j=0;j<DesKeyMoveBit[i];j++){/*循环左移位数*/
t1<<=1;
if(t1&0x10000000)
t1++;
t2<<=1;
if(t2&0x10000000)
t2++;
}
DesChangeAreaIn[0]=(unsigned char)(t1>>24);
DesChangeAreaIn[1]=(unsigned char)(t1>>16);
DesChangeAreaIn[2]=(unsigned char)(t1>>8);
DesChangeAreaIn[3]=(unsigned char)t1;
DesChangeAreaIn[4]=(unsigned char)(t2>>24);
DesChangeAreaIn[5]=(unsigned char)(t2>>16);
DesChangeAreaIn[6]=(unsigned char)(t2>>8);
DesChangeAreaIn[7]=(unsigned char)t2;
DesKey56To48();/*L 6 bytes*/
for(k=0;k<6;k++)
*(pDesKeyOut+i*6+k)=DesChangeAreaOut[k];
}
}
/************************************************************/
void DesDatReplace(unsigned char *pReplaceDat,unsigned char *pReturnDat){
unsigned char replaceDat[8];
unsigned char i;
for(i=0;i<6;i++) DesChangeAreaIn[i]=*(pReplaceDat+i);
/*6bits * 8*/
DesDatBitSwap();
for(i=0;i<8;i++){
replaceDat[i]=DesChangeAreaOut[i];
replaceDat[i]&=0x3f;
}
/*6bits--->4bits*/
replaceDat[0]=DesReplaceT1[replaceDat[0]>>4][replaceDat[0]&0xf];
replaceDat[1]=DesReplaceT2[replaceDat[1]>>4][replaceDat[1]&0xf];
replaceDat[2]=DesReplaceT3[replaceDat[2]>>4][replaceDat[2]&0xf];
replaceDat[3]=DesReplaceT4[replaceDat[3]>>4][replaceDat[3]&0xf];
replaceDat[4]=DesReplaceT5[replaceDat[4]>>4][replaceDat[4]&0xf];
replaceDat[5]=DesReplaceT6[replaceDat[5]>>4][replaceDat[5]&0xf];
replaceDat[6]=DesReplaceT7[replaceDat[6]>>4][replaceDat[6]&0xf];
replaceDat[7]=DesReplaceT8[replaceDat[7]>>4][replaceDat[7]&0xf];
/*4 bytes*/
replaceDat[0]=(replaceDat[0]<<4)+replaceDat[1];
replaceDat[1]=(replaceDat[2]<<4)+replaceDat[3];
replaceDat[2]=(replaceDat[4]<<4)+replaceDat[5];
replaceDat[3]=(replaceDat[6]<<4)+replaceDat[7];
for(i=0;i<4;i++) DesChangeAreaIn[i]=replaceDat[i];
DesDat32To32();
for(i=0;i<4;i++) *(pReturnDat+i)=DesChangeAreaOut[i];
}
/************************************************************/
void DesExeEncrypt(unsigned char *pDesDatIn,unsigned char *pDesKey,unsigned char *pDesDatOut){
unsigned char pdata desNewKey[16][6];
unsigned char i,t;
unsigned char desDatL[4],desDatR[4];
unsigned char desDatLn[4],desDatRn[4];
unsigned char desDatTmp[6];
DesKeyGroup(pDesKey,&desNewKey[0][0]);
for(i=0;i<8;i++)
DesChangeAreaIn[i]=*(pDesDatIn+i);
DesDat64IP();/*初始置换*/
for(i=0;i<4;i++)/*左半部分*/
desDatL[i]=DesChangeAreaOut[i];
for(i=0;i<4;i++)/*右半部分*/
desDatR[i]=DesChangeAreaOut[4+i];
/////
for(i=0;i<16;i++){
for(t=0;t<4;t++){
desDatLn[t]=desDatR[t];
DesChangeAreaIn[t]=desDatR[t];
}
/*32-->48 bits*/
DesDat32To48();
for(t=0;t<6;t++) desDatTmp[t]=DesChangeAreaOut[t];
/*xor Key*/
for(t=0;t<6;t++){
/*加密*/desDatTmp[t]^=desNewKey[i][t];
}
/*replace 48-->32 bits*/
DesDatReplace(desDatTmp,desDatR);
for(t=0;t<4;t++){
desDatRn[t]=desDatR[t]^desDatL[t];
}
/*ready for next*/
for(t=0;t<4;t++){
desDatR[t]=desDatRn[t];
desDatL[t]=desDatLn[t];
}
}
/////
for(i=0;i<4;i++) DesChangeAreaIn[i]=desDatR[i];
for(i=0;i<4;i++) DesChangeAreaIn[4+i]=desDatL[i];
DesDat64IP_R();/*重新换位*/
for(i=0;i<8;i++)
*(pDesDatOut+i)=DesChangeAreaOut[i];
}
void DesExeDecrypt(unsigned char *pDesDatIn,unsigned char *pDesKey,unsigned char *pDesDatOut){
unsigned char pdata desNewKey[16][6];
unsigned char i,t;
unsigned char desDatL[4],desDatR[4];
unsigned char desDatLn[4],desDatRn[4];
unsigned char desDatTmp[6];
DesKeyGroup(pDesKey,&desNewKey[0][0]);
for(i=0;i<8;i++)
DesChangeAreaIn[i]=*(pDesDatIn+i);
DesDat64IP();/*初始置换*/
for(i=0;i<4;i++)/*左半部分*/
desDatL[i]=DesChangeAreaOut[i];
for(i=0;i<4;i++)/*右半部分*/
desDatR[i]=DesChangeAreaOut[4+i];
/////
for(i=0;i<16;i++){
for(t=0;t<4;t++){
desDatLn[t]=desDatR[t];
DesChangeAreaIn[t]=desDatR[t];
}
/*32-->48 bits*/
DesDat32To48();
for(t=0;t<6;t++) desDatTmp[t]=DesChangeAreaOut[t];
/*xor Key*/
for(t=0;t<6;t++){
/*解密*/desDatTmp[t]^=desNewKey[15-i][t];
}
/*replace 48-->32 bits*/
DesDatReplace(desDatTmp,desDatR);
for(t=0;t<4;t++){
desDatRn[t]=desDatR[t]^desDatL[t];
}
/*ready for next*/
for(t=0;t<4;t++){
desDatR[t]=desDatRn[t];
desDatL[t]=desDatLn[t];
}
}
/////
for(i=0;i<4;i++) DesChangeAreaIn[i]=desDatR[i];
for(i=0;i<4;i++) DesChangeAreaIn[4+i]=desDatL[i];
DesDat64IP_R();/*重新换位*/
for(i=0;i<8;i++)
*(pDesDatOut+i)=DesChangeAreaOut[i];
}
/************************************************************//************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -