【问题标题】:Javascript with SJCL lib, decrypt AES in GCM mode带有 SJCL 库的 Javascript,在 GCM 模式下解密 AES
【发布时间】:2020-03-05 14:22:41
【问题描述】:

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

error: TypeError: 'undefined' is not a function (evalating '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 我发现这个线程是:AES in GCM mode in Python

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

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

感谢您的帮助。

【问题讨论】:

  • 你不应该直接使用sjcl.mode.gcm,而应该使用convenience.js中的sjcl.decrypt。您还必须记住,authdata 与 (auth) 标记不同。确保你知道哪个是哪个。注意,sjcl.mode.gcm.decrypt 的第一个参数是 prf,而不是 key
  • 感谢您的帮助。我只是想知道:我怎么知道?
  • 如果文档没有提供您想了解的内容,您必须像我一样查看源代码。 sjcl.decrypt 可能没有公开您需要使其工作的所有选项,因此您需要使用sjcl.mode.gcm.decrypt。找到答案后,自己添加答案。
  • 怎么会这样?您询问了 CryptoJS 不支持的 GCM 模式。
  • 它使用OFB模式。正如我所写,一般我只需要加密,不需要是 AES/GCM。

标签: javascript python encryption


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 2022-01-16
    • 1970-01-01
    • 2013-04-08
    • 2015-11-18
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多