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
相关产品推荐
相关产品推荐

