我在cocos2dx 里使用openssl 的AES CBC模式加解密文件时,遇到解密出的文件总是比原来的明文少几个字节,文件末尾部分的几个字丢失,以下是我的加解密代码,请各位不吝啬赐教,先谢谢了!
int DataTools::AESEncrypt(char * pData, int nLen, char * pBuffer, int nBufLen, char * pszKey)
{
AES_KEY aesKey;
AES_set_encrypt_key((unsigned char *)pszKey, 0x80, &aesKey);
char iv;
memcpy(iv, pszKey, 16);
int nNewLen;
{
//round up
int len = nLen;
int multiple = AES_BLOCK_SIZE;
if ((len+1) % multiple == 0){
nNewLen = len+1;
CCLog("no need to fill");
}
else{
nNewLen = ((len / multiple) + 1) * multiple;
CCLog("fill number:%d",multiple-len%multiple);
}
}
}
//AES_cbc_encrypt((unsigned char *)pData, (unsigned char *)pBuffer, nLen, &aesKey, (unsigned char *)iv, AES_ENCRYPT);
AES_cbc_encrypt((unsigned char *)pData, (unsigned char *)pBuffer, nNewLen, &aesKey, (unsigned char *)iv, AES_ENCRYPT);
return nLen;
}
int DataTools::AESDecrypt(char * pData, int nLen, char * pBuffer, int nBufLen, char * pszKey)
{
AES_KEY aesKey;
AES_set_decrypt_key((unsigned char *)pszKey, 0x80, &aesKey);
char iv;
memcpy(iv, pszKey, 16);
AES_cbc_encrypt((unsigned char *)pData, (unsigned char *)pBuffer, nLen, &aesKey, (unsigned char *)iv, AES_DECRYPT);
return nLen;
}