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

Flutter AES加密数据在PHP端解密失败,求原因分析

解决Flutter(Dart Encrypt)与PHP OpenSSL AES解密失败问题

解密失败的核心原因是Dart端与PHP端的AES算法配置不匹配,具体问题点及修正方案如下:

问题分析

  1. 密钥长度与加密算法不匹配
    你的Dart代码中,密钥是32字节的UTF-8字符串(32个A字符),对应标准的AES-256加密算法。但PHP代码中却指定了AES-192-CBC,算法与密钥长度不兼容,直接导致解密失败。

  2. 加密模式与填充的一致性验证
    Dart的encrypt包中,AES类默认使用CBC模式和PKCS7填充,这与PHP OpenSSL的默认行为(CBC模式、PKCS7填充)是一致的,所以这部分不需要额外调整。

修正后的PHP代码

// 加密后的字符串
$encrypted = "VBnTmnNX14Sbxqu99PMtWw==";

// 与Dart端完全一致的密钥和IV
$key = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
$iv = "AAAAAAAAAAAAAAAA";

// 修正算法为AES-256-CBC,匹配32字节密钥
$decrypted = openssl_decrypt(
    base64_decode($encrypted),
    'AES-256-CBC',
    $key,
    OPENSSL_RAW_DATA,
    $iv
);

var_dump($decrypted); // 输出:string(4) "test"

额外说明

如果后续需要调整加密模式或填充方式,需确保两端配置完全一致:

  • 若Dart端指定了其他模式(如ECB),PHP端也要对应修改算法名称(如AES-256-ECB)
  • 若修改了填充方式,需在PHP端通过options参数调整(例如使用OPENSSL_ZERO_PADDING配合手动填充)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:05:10