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

Angular/Typescript环境下Node-forge AES解密无法返回原始数据求助

问题排查与解决方案

根因说明

你的AES-CBC加解密逻辑本身运行正常,问题出在解密后的结果输出方式:你调用了decipher.output.toHex(),所以输出的是解密后明文的十六进制编码,而非原始字符串。
你给出的解密输出十六进制串7b2270617373223a2257657277657277222c22757365726e616d65223a22717177657764786173227d转码后就是原始的明文{"pass":"Werwerw","username":"qqwewdxas"},和加密前的对象序列化结果完全一致。

修改方案

只需要调整解密后的输出方法,把toHex()替换为toString()即可直接获取原始明文,如需还原为JS对象可再调用JSON.parse()处理。

修改后的代码片段如下:

general() {
    const foo = {
      pass: "Werwerw",
      username: "qqwewdxas"
    };
    var key = "d7rccozrm8q1iuvi";
    var iv = "ttmw0lipoht7kz18";
    console.log("Key", key);
    console.log("IV", iv);

    var cipher = forge.cipher.createCipher('AES-CBC', key);
    cipher.start({ iv: iv });
    cipher.update(forge.util.createBuffer(JSON.stringify(foo)));
    cipher.finish();
    var encrypted = cipher.output;
    // outputs encrypted hex
    console.log("Encrypted", encrypted.toHex());

    var decipher = forge.cipher.createDecipher('AES-CBC', key);
    decipher.start({ iv: iv });
    decipher.update(encrypted);
    var result = decipher.finish(); // check 'result' for true/false
    // 此处修改为toString()获取原始明文,也可以用JSON.parse转成对象
    const decryptedStr = decipher.output.toString();
    console.log("Decrypted string", decryptedStr);
    console.log("Decrypted object", JSON.parse(decryptedStr));
  }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:24:03