【发布时间】: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