我尝试使用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中的拟合解密。
感谢您的帮助。
答案 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);