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

Ionic AES-256-CBC加密数据无法在PHP解密的问题求助

Ionic AES-256加密内容无法在PHP中解密的问题

问题概述

使用@ionic-native/aes-256/ngx在Ionic中加密文本后,PHP端无法解密,且同密钥、IV下PHP加密结果与Ionic加密结果不一致,需实现PHP对Ionic加密内容的解密功能。

关键数据

  • 密钥:12345678901234567890123456789012(32位)
  • IV:1234567890123456
  • 明文:ABCD
  • Ionic加密结果:W2/PbR8z0sKBblfd4ezO1DKI/7UrB/egwDEGyw7w9tY=(输出含双引号和末尾空格)
  • PHP同参数加密结果:5JvCGZhhM12hA9Tz/ldBvw==

Ionic加密代码

import { AES256 } from '@ionic-native/aes-256/ngx';

constructor(public aes: AES256) {}

encrypt(key, iv, data){
    return this.aes.encrypt(key, iv, data);
}

输出:"W2/PbR8z0sKBblfd4ezO1DKI/7UrB/egwDEGyw7w9tY= "

PHP原解密代码

$iv = "1234567890123456";
$key = "12345678901234567890123456789012";
$encrypted = "W2/PbR8z0sKBblfd4ezO1DKI/7UrB/egwDEGyw7w9tY= ";

$decrypted = openssl_decrypt($encrypted, "AES-256-CBC", $key, 0, $iv);

echo $decrypted;

问题原因与解决方案

问题1:加密字符串含无效字符

Ionic输出的加密结果包含双引号和末尾空格,这些字符会导致PHP的Base64解码失败,需先清理。

问题2:插件加密逻辑差异

你使用的旧版本cordova-plugin-aes256(@ionic-native/aes-256/ngx的底层依赖)会自动生成IV,而非使用传入的IV,最终返回的是IV + 密文拼接后的Base64字符串,因此PHP解密时需从加密结果中提取IV,而非使用原传入的IV。

修正后的PHP解密代码

$original_key = "12345678901234567890123456789012";
$encrypted_str = "W2/PbR8z0sKBblfd4ezO1DKI/7UrB/egwDEGyw7w9tY= ";

// 清理加密字符串:移除双引号和多余空格
$clean_encrypted = trim(str_replace('"', '', $encrypted_str));
// Base64解码为二进制数据
$encrypted_data = base64_decode($clean_encrypted);
// 拆分自动生成的IV(前16字节)和实际密文(剩余部分)
$iv = substr($encrypted_data, 0, 16);
$ciphertext = substr($encrypted_data, 16);

// 解密:使用OPENSSL_RAW_DATA获取原始字节,自动处理PKCS7/PKCS5填充
$decrypted = openssl_decrypt($ciphertext, "AES-256-CBC", $original_key, OPENSSL_RAW_DATA, $iv);

echo $decrypted; // 输出:ABCD

额外建议

如果需要让Ionic和PHP的加密逻辑完全一致,建议升级cordova-plugin-aes256到最新版本,新版本支持传入自定义IV,加密结果仅为密文的Base64,与PHP的openssl_encrypt输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:55:55