【问题标题】:How to decrypt AES 128 in CryptoJS (nodejs / web browser)如何在 CryptoJS(nodejs / Web 浏览器)中解密 AES 128
【发布时间】:2015-04-19 10:32:09
【问题描述】:

我正在使用 nodejs 服务器,并且我使用加密节点模块成功加密/解密(使用 IV 和密钥)Base64 中的 json。

但是,当我使用我的 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+cCkcz5tiLKQcxmOpDUow=

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

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

Web 客户端 JS 输出:{name:"toto", age:"15"}(使用相同的 IV & KEY 解密)

【问题讨论】:

  • CryptoJS默认使用CBC模式,所以如果要使用CTR,需要在解密的时候设置这个选项。你能展示示例输入和预期输出吗?
  • @ArtjomB。我的错,我确实在使用“aes-128-cbc”算法。例如,我的节点服务器 {name:"toto", age:"15"} 中有一个 json,我使用 crypto 在 Base64 中加密我的 json。我想用 CryptoJS 解密方法在我的网站上解密它。

标签: javascript json node.js cryptography cryptojs


【解决方案1】:

这对我有用:

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 输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多