void yxyDES2::DecryptData(char* _srcBytes,unsigned int keyN) { char szSrcBits[64] = {0}; char sz_IP[64] = {0}; char sz_Li[32] = {0}; char sz_Ri[32] = {0}; char sz_Final64[64] = {0}; Bytes2Bits(_srcBytes,szSrcBits,64); //IP --- return is sz_IP InitialPermuteData(szSrcBits,sz_IP); //divide the 64 bits data to two parts memcpy(sz_Ri,sz_IP,32); //exchange L to R memcpy(sz_Li,sz_IP + 32,32); //exchange R to L //16 rounds F and xor and exchange for(int i=0;i<16;i++) { FunctionF(sz_Ri,sz_Li,15-i,keyN); } memcpy(sz_Final64,sz_Li,32); memcpy(sz_Final64 + 32,sz_Ri,32); // ~IP for(int j=0;j<64;j++) { szPlaintextRaw[j] = sz_Final64[IPR_Table[j]-1]; } Bits2Bytes(szPlaintextInBytes,szPlaintextRaw,64); }
void yxyDES2::EncryptData(char* _srcBytes,unsigned int keyN) { char szSrcBits[64] = {0}; char sz_IP[64] = {0}; char sz_Li[32] = {0}; char sz_Ri[32] = {0}; char sz_Final64[64] = {0}; Bytes2Bits(_srcBytes,szSrcBits,64); //IP InitialPermuteData(szSrcBits,sz_IP); memcpy(sz_Li,sz_IP,32); memcpy(sz_Ri,sz_IP + 32,32); for(int i=0;i<16;i++) { FunctionF(sz_Li,sz_Ri,i,keyN); } //so D=LR memcpy(sz_Final64,sz_Ri,32); memcpy(sz_Final64 + 32,sz_Li,32); //~IP for(int j=0;j<64;j++) { szCiphertextRaw[j] = sz_Final64[IPR_Table[j]-1]; } Bits2Bytes(szCiphertextInBytes,szCiphertextRaw,64); }
void yxDES::DecryptData(char* _srcBytes,unsigned int keyN) { char temp[8]; char tempszivRev[8]; memset(temp,0x0,8); memset(tempszivRev,0x0,8); if(1 == m_iMode)//cbc { memcpy(tempszivRev,_srcBytes,8); } char szSrcBits[64] = {0}; char sz_IP[64] = {0}; char sz_Li[32] = {0}; char sz_Ri[32] = {0}; char sz_Final64[64] = {0}; Bytes2Bits(_srcBytes,szSrcBits,64); //IP --- return is sz_IP InitialPermuteData(szSrcBits,sz_IP); //divide the 64 bits data to two parts memcpy(sz_Ri,sz_IP,32); //exchange L to R memcpy(sz_Li,sz_IP + 32,32); //exchange R to L //16 rounds F and xor and exchange for(int i=0;i<16;i++) { FunctionF(sz_Ri,sz_Li,15-i,keyN); } memcpy(sz_Final64,sz_Li,32); memcpy(sz_Final64 + 32,sz_Ri,32); // ~IP for(int j=0;j<64;j++) { szPlaintextRaw[j] = sz_Final64[IPR_Table[j]-1]; } Bits2Bytes(szPlaintextInBytes,szPlaintextRaw,64); if(1 == m_iMode)//cbc { XOR(szPlaintextInBytes,szivRev,8,temp); memcpy(szPlaintextInBytes,temp,8); memcpy(szivRev,tempszivRev,8); } }
void yxDES::EncryptData(char* _srcBytes,unsigned int keyN) { char temp[8]; memset(temp,0x0,8); if(1 == m_iMode)//cbc { XOR(_srcBytes,sziv,8,temp); memcpy(_srcBytes,temp,8); } char szSrcBits[64] = {0}; char sz_IP[64] = {0}; char sz_Li[32] = {0}; char sz_Ri[32] = {0}; char sz_Final64[64] = {0}; Bytes2Bits(_srcBytes,szSrcBits,64); //IP InitialPermuteData(szSrcBits,sz_IP); memcpy(sz_Li,sz_IP,32); memcpy(sz_Ri,sz_IP + 32,32); for(int i=0;i<16;i++) { FunctionF(sz_Li,sz_Ri,i,keyN); } //so D=LR memcpy(sz_Final64,sz_Ri,32); memcpy(sz_Final64 + 32,sz_Li,32); //~IP for(int j=0;j<64;j++) { szCiphertextRaw[j] = sz_Final64[IPR_Table[j]-1]; } Bits2Bytes(szCiphertextInBytes,szCiphertextRaw,64); if(1 == m_iMode)//cbc { memcpy(sziv,szCiphertextInBytes,8); } }