无法使用Crypto-Js

时间:2016-08-15 08:14:39

标签: javascript encryption cryptojs

我是加密新手。我想要做的是使用javascript库CryptoJS解密密文。这个代码示例工作正常。加密部分返回密文“ae06b481cecfa67c98c125”(这是正确的),而解密同一个对象则返回原始字符串“Hello World”。

 var key = CryptoJS.enc.Latin1.parse("bad8deadcafef00d");
 var iv = CryptoJS.enc.Latin1.parse("bad8deadcafef00d");
 var encrypted = CryptoJS.AES.encrypt("Hello World", key, {iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
 alert(encrypted.ciphertext);

 var decryptedData = CryptoJS.AES.decrypt(encrypted, key, {iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
 originalData = decryptedData.toString(CryptoJS.enc.Utf8);
 alert(originalData);

这部分工作正常但是当我通过将密文作为字符串独立传递来尝试这段代码时,我没有得到解密的消息。

var key = CryptoJS.enc.Latin1.parse("bad8deadcafef00d");
var iv = CryptoJS.enc.Latin1.parse("bad8deadcafef00d");
var ciphertext = "ae06b481cecfa67c98c125";
// raw = CryptoJS.enc.Base64.parse(cipher);
var decryptedData = CryptoJS.AES.decrypt(ciphertext, key, {iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
originalData = decryptedData.toString(CryptoJS.enc.Utf8);
alert(originalData);
console.log(originalData);

有人可以指出为什么吗?

我在html文件中包含以下库。

<script src="js/rollups/aes.js"></script>
<script src="js/components/mode-ctr.js"></script>
<script src="js/components/pad-nopadding.js"></script>

1 个答案:

答案 0 :(得分:0)

DATEADD(HH,(DATEPART(HOUR, GETUTCDATE())-DATEPART(HOUR, GETDATE()))*-1, [MySourceColumn]) 需要CryptoJS.AES.decrypt对象或OpenSSL格式的字符串。如果传递的键是字符串,则需要OpenSSL格式的字符串,否则为CipherParams对象。

由于您的密钥不是字符串,因此您需要:

CipherParams

如果密钥是一个字符串,那么它实际上不是一个密钥,但假设是一个密码,密钥将从该密码派生,并带有一个随机的8字节盐。这与OpenSSL的var decryptedData = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.enc.Hex.parse("ae06b481cecfa67c98c125") }, key, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding }); 函数相当。

相关问题