SJCL的问题“;无法读取属性'替换'“未定义”;

Problems with SJCL "Cannot read property 'replace' of undefined"

本文关键字:未定义 替换 属性 问题 SJCL 读取      更新时间:2023-09-26

使用Sjcl,我尝试编写一个小服务,从我的javascript应用程序发送和接收加密数据。

遗憾的是,sjcl文档缺少关于如何处理其AES加密数据的信息。他们的encrypt方法返回一个包含服务器属性的对象,我只能猜测它是什么。

{"iv":"i0t5BttfXwtY6hxuFSZxJg==",
"v":1,
"iter":1000,
"ks":128,
"ts":64,
"mode":"ccm",
"cipher":"aes",
"salt":"MZ8hpbz+5hU=",
"ct":"n5mR5jwawYwsaUV0xbcYXrcCXPWjR5qMG23qU5Spguz4jpjG5QdFMWSf"}

我可以识别iterkstsmodeciphersalt。我的猜测是ct是密文,代表加密的数据。但什么是viv

我试着解密我的密文,把ct作为参数,甚至试着把整个结果作为参数,但它总是会产生错误:

var result = sjcl.json.encrypt(
  'pw123', 
  '{text: "this should be decrypted"}', 
  parameters, 
  rp
);
var originalText = sjcl.json.decrypt(
  'pw123', 
  result.ct,
  parameters,
  rp);
// Results in:
// Uncaught TypeError: Cannot read property 'replace' of undefined

如何使用他们的解密方法解密我的ct?有人对此有任何经验,可以举一个简单的例子吗?

加密/解密使用默认参数:

var result = sjcl.json.encrypt(
  'pw123', 
  '{text: "this should be decrypted"}'
);
var originalText = sjcl.json.decrypt(
  'pw123', 
  result);

但什么是viv

v可能是密文的版本信息,以便SJCL的后续版本可以对其进行解密。它只设置为1,从不在代码中使用。

CCD_ 16是诸如CCM之类的大多数分组密码模式所需要的初始化向量。对于AES,它是16字节长,或者仅仅是块大小。

我的示例中的问题是,我试图访问result.ct,但结果是stringified JSON,因此访问它的属性ct显然返回了undefined

在我的另一次尝试中,我通过传递parameters来覆盖参数。在不传递额外参数的情况下进行解密是有效的-初始参数已经在result字符串化JSON中给出。

更新后的小提琴在这里:http://jsfiddle.net/e5rqogm3/1/