You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Java AES/CBC/PKCS5Padding加密逻辑转换为PHP实现?

问题分析与解决方案

你的PHP代码和Java代码输出不一致,核心是两个关键错误:

1. AES模式与密钥长度不匹配

Java中SecretKeySpec会根据密钥字节长度自动适配AES版本:你的密钥mykey123823196ext470329981320tst是32个UTF-8字符(对应32字节),实际使用的是AES-256;但PHP代码指定的是AES-128-CBC,导致密钥处理逻辑完全错误。

2. IV(初始化向量)的编码错误

Java中new byte[16]生成的是全0字节数组(每个字节值为0x00),而PHP里的'0000000000000000'是16个ASCII字符'0'(每个对应字节0x30),两者完全不同。


修正后的PHP代码

$str = 'Emma';
$key = 'mykey123823196ext470329981320tst';
// 生成和Java一致的全0字节IV
$iv = str_repeat(chr(0), 16);
// 使用AES-256-CBC匹配Java的密钥长度
$encrypted = openssl_encrypt($str, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
$encodedEncryptedData = base64_encode($encrypted);
echo $encodedEncryptedData; // 输出:wuN9UzYYdmevVxgTxcYIbw==

关键调整说明

  • 把加密模式改为AES-256-CBC,对齐Java中32字节密钥对应的AES版本
  • 用str_repeat(chr(0), 16)生成全0字节IV,和Java的new byte[16]逻辑一致
  • 保留OPENSSL_RAW_DATA参数,确保输出原始加密字节流后再Base64编码,和Java流程对齐

内容的提问来源于stack exchange,提问作者newsshare24h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:45:29