0
这是我的代码:PHP - Openssl_decrypt错误:错误最终块长度(AES 256 CBC模式加密/解密)
function decrypt($code)
{
$key = '3552ef55ecdf04324..'; // 64 bytes length
$iv = 'd20818af907b59c3b15d258dd3969770'; // 32 bytes length
$key = hash("sha256", $key,true); // 32 bytes length
$iv = md5($iv,true); // 16 bytes length
echo strlen(base64_decode($code)); // 80 bytes
//return openssl_decrypt(base64_decode($code), 'aes-256-cbc', $key, 0 ,$iv); // return false
$output = openssl_decrypt(base64_decode($code), 'aes-256-cbc', $key, 0 ,$iv);
return openssl_error_string();
}
我使用加密SWIFT/Android和我解密使用PHP。
openssl_error_string()方法返回“错误:0606506D:数字包络例程:EVP_DecryptFinal_ex:错误的最终块长度”。
请注意,加密swift/android中的密钥和iv是相同的。 我无法在这里找到问题。任何人?谢谢。
你指定PKCS#7(姓PKCS#5)填充?加密数据是块长度的多倍(AES为16字节)?我总是建议不要合并步骤,这会使调试更加困难。十六进制转储加密数据('base64_decode($ code)'),它可能不是你想象的那样。 – zaph
指定PKCS#7填充。加密数据是块长度(80字节)的倍数。这里是进制打印:
@zaph –加密数据($码):** q7zq1SIaVt3rrTAXlsiEbRbIwx/MB/FxG2PzcYUYsLjRm/O + 36Cjw0XSYnbczJRThayIdxFg1hK0UtvSLem9O/ahRlrsVFVUBI8AYAnPr8I = ** 明文必须是:** ** a18ac4e6fbd3fc024a07a21dafbac37d828ca8a04a0e34f368f1ec54e0d4fffb @zaph –