DES加密,加密字符串太长,导致解密不全
用 DES_cfb64_encrypt 函数加解密。
如果加密的字符串 太长,假设为 n 个字符;
在解析的时候,会把会面的一部分字符串丢掉。
有的时候是正常的,换一些其他的字符,可能会解析补全。
小例子见下,只看算法就行,其他忽略~~~
DES 加密 解密
int main(int argc, char * argv[])
{
//test
string token="";
string key = "ccccccccc";
//creat token
//string tmpStr = ip + "|" + expireTime;
//string tmpStr = "ABC+192.168.102.20+123123+1374121139+cc17aa946b9813c3615bdbde727d7f6c";
//string tmpStr = "ABC+192.168.102.20+123123+1374123631+30935773f402f3ea16542a5b62070192";
string tmpStr = "ABCABC+192.168.102.20+123123+1374125883+4ee009f5459edcdfdfa6abb1bb8d4a4c";
char decryptBuf[44096]={};
char binaryBuf[44096]={};
for(unsigned int i=0; i<tmpStr.size(); i++)
{
decryptBuf[i] = tmpStr.c_str()[i];
}
unsigned char newKey[8];
unsigned char aKey[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
unsigned char iv[8] = {0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x8};
for(int i = 0; i < 8; i ++)
{
newKey[i] = key[i] ^ aKey[i];
printf("%c\n",newKey[i]);
}
printf("\n");
des_key_schedule ks;
des_set_key_unchecked(&newKey, ks);
int decryptSize = 0;
DES_cfb64_encrypt((unsigned char*)decryptBuf,(unsigned char*)binaryBuf, strlen(decryptBuf),&ks,&iv,&decryptSize, DES_ENCRYPT);
unsigned char newBinaryBuf[44096]={};
printf("strlen(binaryBuf)=%d\n",strlen(binaryBuf));
for(unsigned int i = 0; i < strlen(binaryBuf); i++)
{
printf("%d ",i);
newBinaryBuf[i] = binaryBuf[i];
char tmpNum[10] = "";
sprintf(tmpNum, "%02x", newBinaryBuf[i]);
token += tmpNum;
}
printf("get token[%s]\n", token.c_str());
const char *tokenStr = token.c_str();
char authKeyTmp[44096], binaryBuf[44096];
char decryptBuf[44096]={};
strncpy(authKeyTmp, tokenStr , 44096);
int bufSize = 0;
printf("token size = %d\n", strlen(authKeyTmp));
if(!hex2Binary(authKeyTmp, binaryBuf, &bufSize))
{
printf("convert authkey from hex to binary fail\n");
}
printf("token size = %d\n", strlen(binaryBuf));
unsigned char newKey[8];
unsigned char aKey[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
unsigned char iv[8] = {0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x8};
for(int i = 0; i < 8; i ++)
newKey[i] = key[i] ^ aKey[i];
des_key_schedule ks;
des_set_key_unchecked(&newKey, ks);
int decryptSize = 0;
DES_cfb64_encrypt((unsigned char*)binaryBuf, (unsigned char*)decryptBuf, bufSize,&ks,&iv,&decryptSize, DES_DECRYPT);
string tmpStr = decryptBuf;
printf("AAAAAAAAAAAAA %s\n",tmpStr.c_str());
return 0;
}