如何使用AES解密CryptoJS?

时间:2014-11-27 13:00:12

标签: javascript encryption aes cryptojs

正如问题所示,我似乎无法使用所需选项(AES,ECB模式和PKCS7)正确获取解密值。

我正在加密如下:

  var ENC_KEY = "bXlrZXk=";  //"mykey"

  var encrypted = CryptoJS.AES.encrypt("hello",  CryptoJS.enc.Base64.parse(ENC_KEY), 
    {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
  console.log('encrypted: ' + encrypted);

按预期工作并输出我期望的加密值但是当我使用下面的解密时,我最终得到一个空对象输出:

var decrypted = CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Base64.parse(ENC_KEY), 
    {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    console.log('decrypted: ' + decrypted);

我也尝试过使用:

console.log('encrypted is decrypted to: ' + decrypted.toString(CryptoJS.enc.Utf8);

但没有快乐......

1 个答案:

答案 0 :(得分:1)

我在小提琴中试过这个(为了让它起作用而改变一下):

//decrypt gives a hex
function hex2a(hexx) {
    var hex = hexx.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}

var key = CryptoJS.enc.Base64.parse("Secret Passphrase"); 

alert(key);

var encrypted = CryptoJS.AES.encrypt("hello",  key, 
    {
        mode: CryptoJS.mode.ECB
    });

alert('encrypted: ' + encrypted);

var decrypted = CryptoJS.AES.decrypt(encrypted, key, 
    {
        mode: CryptoJS.mode.ECB
    });

alert('decrypted: ' + hex2a(decrypted));

http://jsfiddle.net/gttL705r/

并发现decrypt返回了一个十六进制,这可能不是一个字符串......这可能导致你的问题吗?因此,使用快速hex2ascii函数,'hello'将返回:)

我还删除了指定的填充,因为Pkcs7被认为是文档中的默认值,我找不到我需要下载的src js。