Javascript with SJCL lib,在 GCM 模式下解密 AES

Javascript with SJCL lib, decrypt AES in GCM mode

本文关键字:模式 解密 AES GCM with SJCL lib Javascript      更新时间:2023-09-26

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

error: TypeError: 'undefined' 不是函数(计算 'b.encrypt([0,0,0,0]('(

代码:

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 我发现的是这个线程:Python中GCM模式下的AES

用一种语言加密和用另一种语言解密时,我有什么特别需要考虑的吗?恐怕如此...我可以以某种方式检查加密信息是否有效吗 AES/GCM?我真的不确定如何在这里进行,因为我不是JS或Python或加密专家。

有关背景信息:我尝试在纯python中实现或多或少安全的加密(因此我可以在Google App Engine上运行它(和纯JS中的合适解密。

感谢您的任何帮助。

您无法直接解密尝试将加密的字符串,密码,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);