如何在 CryptoJS(nodejs/网络浏览器)中解密 AES 128
How to decrypt AES 128 in CryptoJS (nodejs / web browser)
我正在使用 nodejs 服务器,我成功地 encrypt/decrypt(使用 IV 和密钥)在 Base64 中使用加密节点模块 json。
但是,当我向 Web 客户端发送 AES 128 CTR json 的发射操作时,我正确地收到了我的 json 和 base64 数据加密,但我的问题是当我想' t解密这个。
在 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" 因为它在我的网络客户端中被 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+cCkcz5tiLKQcxmOpDUow=
正在向 Web 客户端发出输出抛出 socket.io。
Web 客户端 JS 输入:mfrpKm5k5YtGkX6rp9/Bmz+cCkcz5tiLKQcxmOpDUow=
Web 客户端 JS 输出:{name:"toto", age:"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 输入。
我正在使用 nodejs 服务器,我成功地 encrypt/decrypt(使用 IV 和密钥)在 Base64 中使用加密节点模块 json。
但是,当我向 Web 客户端发送 AES 128 CTR json 的发射操作时,我正确地收到了我的 json 和 base64 数据加密,但我的问题是当我想' t解密这个。
在 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" 因为它在我的网络客户端中被 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+cCkcz5tiLKQcxmOpDUow=
正在向 Web 客户端发出输出抛出 socket.io。
Web 客户端 JS 输入:mfrpKm5k5YtGkX6rp9/Bmz+cCkcz5tiLKQcxmOpDUow=
Web 客户端 JS 输出:{name:"toto", age:"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 输入。