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

PHP与Java AES-256-CBC加密结果不一致,需对齐Java输出

调整PHP AES-256-CBC加密代码以匹配Java输出

问题描述

使用以下PHP代码进行AES-256-CBC加密:

$content='Hello World';
        
$output = openssl_encrypt(
    $content,
    'AES-256-CBC',
    '2EE3732CA11BAD106A2429C142136345',
    OPENSSL_RAW_DATA,
    $iv
);
        
echo bin2hex($output);

得到输出:bc08212ff2960c50327e4f1585f401b9

但使用在线工具加密时,输出为:5415dc0f7cc496be97f2dc9b9d5b2b42,同时以下Java代码也得到该结果:

String text="Hello World";

String secretKey="2EE3732CA11BAD106A2429C142136345";

IvParameterSpec ivParameterSpec = new IvParameterSpec("0000000000000000".getBytes());
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "AES");
Cipher instance = Cipher.getInstance("AES/CBC/PKCS5Padding");
instance.init(1, secretKeySpec, ivParameterSpec);
String output= stringToHex(instance.doFinal(text.getBytes()));

System.out.println(output); //Output: 5415dc0f7cc496be97f2dc9b9d5b2b42

需要修改PHP代码,使其输出与Java一致。

解决方法

修改后的PHP代码如下:

$content = 'Hello World';
$key = '2EE3732CA11BAD106A2429C142136345';
// 与Java一致的IV:16个0的字符串
$iv = '0000000000000000';

$output = openssl_encrypt(
    $content,
    'AES-256-CBC',
    $key,
    OPENSSL_RAW_DATA,
    $iv
);

echo bin2hex($output); // 输出:5415dc0f7cc496be97f2dc9b9d5b2b42

关键修改点

  • 统一初始向量(IV):Java代码中使用固定的16个0字符串作为IV,PHP代码需显式定义相同值的$iv,确保加密初始条件一致。
  • 编码对齐:PHP默认字符串编码为UTF-8,与Java默认的字符串转字节编码匹配,无需额外转换。
  • 填充方式兼容:Java使用PKCS5Padding,PHP的openssl_encrypt默认使用PKCS7Padding,由于AES块大小为16字节,两种填充方式效果完全一致,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:58:20