当我们从JNI调用c ++函数来获取解密数据时,AES_cbc_encrypt不会被解密

时间:2016-01-13 09:02:14

标签: c++ password-encryption

我正在使用AES_CBC_Encrypt(...)来加密和解密数据,当我们使用AES_CBC_Encrypt在c ++中加密和解密时它运行正常但是需要从java调用c ++函数来获取解密数据(真实的一个像密码)但当我们当时通过JNI调用c ++函数时,我们没有得到正确的解决。

我们只传递java中的参数,我们在c ++中得到适当的参数,从文本文件中获取正确的加密令牌,我们保存加密密码,但解密后显示不同。 我们也使用填充

AES_cbc_encrypt (Inputbuf, outputbuf, ilen, &aesDecryKey, ivv, AES_DECRYPT);
if (length > AES_BLOCK_SIZE && (length % AES_BLOCK_SIZE == 0))
{
  length = length - AES_BLOCK_SIZE;
  memset(pObuf + length, 0, AES_BLOCK_SIZE);
}
cout << " password is " << outputbuf << endl;

1 个答案:

答案 0 :(得分:0)

我没有看到变量length的设置位置。也许ilenlength应该是相同的,并且有一个错字。

if代码的原因是什么?如果要删除填充块,则删除它是不正确的,请参阅PKCS#7 padding documentation。如果输入数据是块大小的倍数,并且存在PKCS#7(或PKCS#5)填充,则必须添加完整的填充块