0
我使用aes,服務器(C#)對消息加密到客戶端(C++)進行解密。如果在服務器上發佈生成調試客戶端說,如果消息是一個值大於127的變量(int64_t),它不能解密消息,那麼一切正常OKAES_cbc_encrypt加密在mac os上無法正常工作
結構消息
class version : public ::google::protobuf::Message
{
string* software_;
int64_t version_;
};
我的代碼
uint32_t encrypt(const unsigned char *in, unsigned char **out, uint32_t size)
{
/**
* tresh - ivec change after AES_cbc_encrypt
*/
unsigned char _ivec[AES_BLOCK_SIZE];
memcpy(&_ivec, &ivec, AES_BLOCK_SIZE);
/**/
uint32_t size_out = this->getBlockSize(size);
unsigned char *in_padding = (unsigned char*)malloc(size_out);
memset(in_padding, size_out - size, size_out);
memcpy(in_padding, in, size);
AES_KEY _key;
AES_set_encrypt_key(key, PK_SIZE_KEY*BITS_IN_BYTE, &_key);
AES_cbc_encrypt(in_padding, *out, size_out, &_key, _ivec, AES_ENCRYPT);
free(in_padding);
return size_out;
};
uint32_t getBlockSize(uint32_t size)
{
if((size % AES_BLOCK_SIZE) != 0){
size /= AES_BLOCK_SIZE;
size += 1;
size *= AES_BLOCK_SIZE;
}
return size;
};
如何解決呢?很奇怪