SJCL 的问题 "Cannot read property 'replace' of undefined"

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

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

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

{"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

如何使用他们的 decrypt 方法解密我的 ct? 任何人都有这方面的经验并可以举一个简短的例子吗?

encryption/decryption 使用默认参数:

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

var originalText = sjcl.json.decrypt(
  'pw123', 
  result);

But what is v and iv?

v 可能是密文的版本信息,以便更高版本的 SJCL 可以解密它。它只是简单地设置为 1,从未在 code.

中使用

iv 是大多数分组密码模式(如 CCM)所需的初始化向量。对于 AES,它是 16 个字节长或只是块大小。

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

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

更新后的 fiddle 在这里:http://jsfiddle.net/e5rqogm3/1/