Javascript加密库无法在一个简单的示例程序中加密和解密字符串

时间:2015-11-07 20:22:00

标签: javascript node.js cryptojs

我正在尝试学习javascript并且正在学习教程,我认为我正确地输入了所有内容但由于某种原因我使用cypto-js库加密的字符串不能正确加密。我没有收到错误,但未加密的字符串不正确。我正在使用macintosh和“crypto-js”:“^ 3.1.5”。

这是我的示例代码。

var crypto = require('crypto-js');

var secretMessage = 'I hid the chips under the couch.';
var secretKey = '123abc';

var encryptedMessage = crypto.AES.encrypt(secretMessage, secretKey);
console.log('encryptedMessage: ' + encryptedMessage);

var bytes = crypto.AES.decrypt(encryptedMessage, secretKey);
var decryptedMessage = bytes.toString(crypto.enc.utf8);
console.log('decrpt2: ' + decryptedMessage);

以下是我得到的结果

   $ node example-encryption.js
    encryptedMessage: U2FsdGVkX180KTEpMiLEjZDSAkhNkmbBuRa9RXFwCgx6gA/PUFr+KOIv6Gr6TgIYrkfUu3F+OM/kRJ3sTTgsfg==
    decrpt2: 49206869642074686520636869707320756e6465722074686520636f7563682e

有人可以帮忙吗?

谢谢, 格雷格

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题,主要是您需要提供正确长度的密钥,并且还需要将cipherParams对象传递给decrypt()方法而不是密文本身。

这里有一些有用的代码,对于奖励积分,它通常可与大多数系统中的OpenSSL二进制文件和PHP库兼容:

var CryptoJS = require( 'crypto-js' );

var secretMessage = 'I hid the chips under the couch.';
var secretKey = 'b52b4f45b6e9337b57869d7cb718c693';

var encryptedMessage = CryptoJS.AES.encrypt(secretMessage, CryptoJS.enc.Hex.parse(secretKey),
                       { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.NoPadding });

console.log('encryptedMessage: ' + encryptedMessage.ciphertext);

cipherParams = CryptoJS.lib.CipherParams.create(
               {ciphertext: CryptoJS.enc.Hex.parse(encryptedMessage.ciphertext.toString())});

var bytes = CryptoJS.AES.decrypt(cipherParams,CryptoJS.enc.Hex.parse(secretKey),
            { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.NoPadding });

console.log( 'Decrypted:' + bytes.toString(CryptoJS.enc.Utf8));

没有初始化载体,因为我们使用的是ECB而不是CBC。如果您想要安全的话,请为每条消息使用带有随机IV的CBC。