【发布时间】:2014-03-30 11:24:17
【问题描述】:
我正在编写 C++ 服务器函数,通过使用 AES CBC 128 位传递一个加密字符串,该函数将被称为 java 进程。我无法更改此 C++ 函数的签名。
为此,我在 C++ 代码中使用 openssl AES_set_decrypt_key() 和 AES_cbc_encrypt() 方法。 但是在 AES_cbc_encrypt() 的签名中有一个长度参数,我相信它是实际字符串的长度(未加密)。但是,我的 C++ 代码不知道实际长度。我是否采取了错误的方法?有人可以帮忙吗?
示例代码如下:
unsigned char* decrypt(unsigned char* l_cInput_ptr)
{
unsigned char key[] = "asdfghjklpoiuytr";
unsigned char iv[] = "asdfghjklpoiuytr";
unsigned char * dec_out = (unsigned char *)malloc(80*sizeof(char));
memset(dec_out, 0, 80);
AES_KEY dec_key;
AES_set_decrypt_key(key,128,&dec_key);
AES_cbc_encrypt(l_cInput_ptr, dec_out, 16, &dec_key, iv, AES_DECRYPT);
....
}
l_cInput_ptr 是加密字符串。 decrypt() 方法不知道实际字符串的长度。在这种情况下,我刚刚使用了 16 的虚拟值。而且我不能更改java代码。
【问题讨论】:
-
EVP Symmetric Encryption and Decryption 和 EVP Authenticated Encryption and Decryption。如果您不确定,请使用经过身份验证的加密。
标签: openssl