如何在CryptoJS(nodejs/web浏览器)中解密AES 128

How to decrypt AES 128 in CryptoJS (nodejs / web browser)

本文关键字:浏览器 解密 AES web CryptoJS nodejs      更新时间:2023-12-27

我使用的是一个nodejs服务器,我成功地用加密节点模块在Base64中加密/解密了一个json(使用IV&Key)。

然而,当我用AES 128 CTR json向web客户端发送一个发送操作时,我正确地接收到了加密了base64数据的json,但我的问题是当我不想解密它时。

在CryptoJS文档中,我发现了这样一个例子:

var text = "Hello world";
var key = CryptoJS.enc.Base64.parse("myKey");
var iv  = CryptoJS.enc.Base64.parse("myIv");
var encrypted = CryptoJS.AES.encrypt(text, key, {iv: iv});
console.log(encrypted); // print something like that s {init: function, $super: s, ciphertext: l.WordArray.t.extend.init, key: s, iv: s…}
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: iv});
console.log(decrypted.toString(CryptoJS.enc.Utf8)); // print Hello world

我们可以很容易地解密"Hello world",因为它是由我的web客户端中的CryptoJS加密的。但我的问题是,我想解密一个没有使用CryptoJS加密系统的数据。

我想做这样的事情:

var text = "myJsonEncryptedInBase64";
var key = CryptoJS.enc.Base64.parse("myKey");
var iv  = CryptoJS.enc.Base64.parse("myIv");

var decrypted = CryptoJS.AES.decrypt(text, key, {iv: iv});
console.log(decrypted.toString(CryptoJS.enc.Utf8)); //print my decrypted json

我有一个错误,因为CryptoJS解密方法使用这样的数组数据:

s {init: function, $super: s, ciphertext: l.WordArray.t.extend.init, key: s, iv: s…}

你能帮帮我吗?

非常感谢。

编辑:

Node.js输入:{name:"toto",age:"15"}(使用Base64加密)。

Node.js输出:mfrpKm5k5YtGkX6rp9/Bmz+ckcz5tiLKQcxmOpDUow=

向web客户端发出输出throw socket.io。

Web客户端JS输入:mfrpKm5k5YtGkX6rp9/Bmz+ckcz5tiLKQcxmOpDUow=

Web客户端JS输出:{名称:"toto",年龄:"15"}(用相同的IV&KEY解密)

这对我有效:

var CryptoJS = require("crypto-js");
var data = JSON.stringify({abc: 'xyz'});
var encrypted = CryptoJS.AES.encrypt(data, "my-secret");
console.log(encrypted.toString());
var decrypted = CryptoJS.AES.decrypt(encrypted, "my-secret");
var object = JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
console.log(object);
console.log(object.abc);

希望这就是你想要做的。这也应该适用于Base64输入。