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

PHP AES-128-CFB解密逻辑如何使用CryptoJS在JavaScript中复现

问题原因

你的代码核心错误为未关闭CryptoJS默认的Pkcs7填充校验:
AES-128-CFB属于流加密模式,加密过程不需要追加填充,PHP端openssl_decrypt使用OPENSSL_RAW_DATA参数时默认不做填充处理,CryptoJS默认开启Pkcs7填充校验,校验失败就会返回空结果。

另外你初始化WordArray时没有显式指定字节长度,特殊场景下可能出现截断问题,建议补充长度参数。

修正后可运行代码

// 需确保已引入所有依赖:CryptoJS核心库、enc-base64、aes、mode-cfb、pad-nopadding
var key = '1234567890123456';
var base64data = CryptoJS.enc.Base64.parse("1EwMDT20BELrEixvrSGswDC4GZIn5BWGor6MP6ERi9Ux");

// 提取前16字节作为IV
var iv = CryptoJS.lib.WordArray.create(base64data.words.slice(0, 4), 16);
// 提取16字节后的内容作为密文
var encrypted = CryptoJS.lib.WordArray.create(base64data.words.slice(4), base64data.sigBytes - 16);

var decrypted = CryptoJS.AES.decrypt(
    { ciphertext: encrypted }, 
    CryptoJS.enc.Utf8.parse(key), 
    {
        iv: iv,
        mode: CryptoJS.mode.CFB,
        padding: CryptoJS.pad.NoPadding // 核心修正项:关闭填充校验
    }
);

console.log("Decrypted: " + decrypted.toString(CryptoJS.enc.Utf8));

运行上述代码将正确输出Decrypted Message,与PHP端运行结果一致。

注意事项

如果运行仍无结果,请检查是否完整引入了mode-cfb和pad-nopadding两个扩展模块,这两个模块不属于CryptoJS核心默认包,需要单独引入。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:08