2014-09-03 56 views
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; 
}; 

如何解決呢?很奇怪

回答

0

改變了代碼和確定

uint32_t getBlockSize(uint32_t size) 
{ 
size /= AES_BLOCK_SIZE; 
size += 1; 
size *= AES_BLOCK_SIZE; 
return size; 
}; 
相關問題