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

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

{"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
任何有此经验的人都可以举一个简单的例子吗?

最佳答案

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

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

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



  但是什么是viv


v可能是密文的版本信息,以便SJCL的更高版本可以对其进行解密。它只是设置为1,并且从未在code中使用。

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

09-13 02:13