我正在使用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;
答案 0 :(得分:0)
我没有看到变量length
的设置位置。也许ilen
和length
应该是相同的,并且有一个错字。
if
代码的原因是什么?如果要删除填充块,则删除它是不正确的,请参阅PKCS#7 padding documentation。如果输入数据是块大小的倍数,并且存在PKCS#7(或PKCS#5)填充,则必须添加完整的填充块 。