如何用PHP实现AES解密?已有Java解密代码求转换
解决AES CBC解密从Java转PHP的问题
你的PHP代码里有几个关键错误导致解密失败,我帮你梳理并修正:
问题分析
你的Java代码使用的是AES-128-CBC + PKCS5Padding,但PHP代码存在以下问题:
- 错误使用
hex2bin()处理密钥和IV:Java里是对Base64字符串解码,PHP应该对应使用base64_decode() - 密钥值写错:你用了
X9Rgj55s7txnPAVJDlxTuA==,但Java里的正确密钥是r/RloSflFkLj3Pq2gFmdBQ== - 加密算法指定错误:Java里的密钥是16字节(128位),对应
AES-128-CBC,你写成了AES-256-CBC
修正后的PHP代码
// 正确解码密钥(Base64格式,而非十六进制) $key = base64_decode('r/RloSflFkLj3Pq2gFmdBQ=='); // 正确解码初始化向量IV $iv = base64_decode('yzXzUhr3OAt1A47g7zmYxw=='); // 加密后的目标字符串 $encrypted = 'IKWpOq9rhTAz/K1ZR0znPA=='; // 使用匹配的AES-128-CBC算法,OPENSSL_RAW_DATA用于直接处理二进制数据 $output = openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); // 输出解密结果 echo $output;
补充说明
- PKCS5Padding和PKCS7Padding在OpenSSL中是兼容的,所以不需要额外配置填充方式
- 确保所有Base64字符串没有多余的空格或换行符,否则会导致解码失败
内容的提问来源于stack exchange,提问作者Jay Doshi
相关产品推荐
相关产品推荐

