2 a513409514 a513409514 于 2014.07.05 15:20 提问

des 加密后密文赋给另一个字符数组,解密出问题

我用des加密后,对原始密文解密没有问题。
但是使用这两个函数
void MessageName2::setCiphertxt(const char * ciphertxt_var)
{
this->ciphertxt_var = ciphertxt_var;
}
const char * MessageName2::getCiphertxt() const
{
return ciphertxt_var.c_str();
}

原始数据我是通过随机数生成的,转为char[]后进行加密,对密文先用setCiphertxt(),再用解密函数对getCiphertxt()解密,测试五十次大概就会有一次出现问题。
比如,原始数据是21001839,解密后变成210018ßt,后面几位出现乱码,或者解密出来都是乱码。
加解密代码是网上找的,测试过是没有问题的。
纠结了好久,有没有大神知道是怎么回事?

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 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);
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!