使用SJCL lib的Javascript,在GCM模式下解密AES

时间:2014-12-15 20:01:11

标签: javascript python encryption

我尝试使用Javascript中的SJCL库(来自CasperJS内)在GCM模式下使用AES解密密码。 当我执行下面的代码时,我收到的错误是:

错误:TypeError:' undefined'不是一个功能(评估'加密([0, 0,0,0])&#39)

代码:

var masterkey = '39537496606860671661230109146651832357';
var cipher = 'Sa2Rk3bbdiaI7mO/';
var iv = '59804781381539321505720964105';
var authdata = '199590863504973848417387014842606357793';

var decff = sjcl.mode.gcm.decrypt(masterkey, cipher, iv, authdata);
console.log (decff);

正如您所看到的,我基本上只是按照SJCL文档告诉我的那样调用解密函数。

使用以下代码在python中完成加密:https://github.com/bozhu/AES-GCM-Python我找到了这个帖子:AES in GCM mode in Python

在使用一种语言进行加密并在另一种语言中进行解密时,我是否需要考虑一些特殊内容?我想恐怕是的... 我能否以某种方式检查加密信息是否为有效的AES / GCM? 我不确定如何继续这里,因为我没有JS或Python或加密专家。

有关背景资料: 我尝试在纯python中实现或多或少的安全加密(所以我可以在Google App Engine上运行)和纯JS中的拟合解密。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您不能直接解密尝试将加密的字符串,密码,IV和身份验证数据转换为bitArray。

 const data = sjcl.mode.gcm.decrypt(cipherArray, encryptedBitArray, iv, authArray, 128);

这里的大小是128,您也可以使用256。

也请尝试在IV后面加上插入的字符串。

 const bitArray = sjcl.codec.base64.toBits(content);
  const bitArrayCopy = bitArray.slice(0);
  const ivdec = bitArrayCopy.slice(0, 4);
  const encryptedBitArray = bitArray.slice(4);
  var key = sjcl.codec.base64.toBits("2d73c1dd2f6a3c981afc7c0d49d7b58f");
  let cipher = new sjcl.cipher.aes(key);