如何在node.js中加密并在浏览器Javascript中解密

3

我有一个简单的NodeJS程序用于加密明文:

var crypto = require("crypto");

var compatEnc = crypto.createCipher("aes-256-cbc", "password");
compatCrypted = compatEnc.update("Message", "utf8", "hex");
compatCrypted += compatEnc.final("hex");
console.log(compatCrypted);
// 0293cf0bdf5323cff809ba406ffc8283

我尝试在浏览器中解密0293cf0bdf5323cff809ba406ffc8283。

<!doctype html>
<html>
  <body>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/core-min.js"></script>

    <script>

    var nosalt = CryptoJS.lib.WordArray.random(0);

    // { salt : null } will generate random salt
    var enc = CryptoJS.AES.decrypt("0293cf0bdf5323cff809ba406ffc8283", "password",
    { salt: nosalt });

    console.log(CryptoJS.enc.Utf8.stringify(enc));

    </script>
  </body>
</html>

输出为空白。你能告诉我我的解密代码有什么问题吗?谢谢。

4
你知道如果在JS中硬编码密钥,这种加密将变得毫无用处,对吧? - user2357112
我只是在做一个测试。 - user2631655
你是否尝试过在node.js中解密?我建议你先尝试一下,然后再转到浏览器。 - Yusuf X
使用NodeJS进行解密很容易:var crypto = require("crypto");var compatEnc = crypto.createDecipher("aes-256-cbc", "password"); compatCrypted = compatEnc.update("0293cf0bdf5323cff809ba406ffc8283", "hex", "utf8"); compatCrypted += compatEnc.final("utf8"); console.log(compatCrypted); // Message - user2631655
你看过npm的cryptojs模块吗?http://npm.im/cryptojs - SheetJS
1个回答

2

CryptoJS不知道你的加密文本是十六进制编码的。

首先使用CryptoJS.enc.Hex.parse(...);将其转换为WordArray。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接