2015-02-06 111 views
2

使用Sjcl我尝试写一点服务来发送和接收来自我的javascript应用程序的加密数据。SJCL的问题“无法读取属性”取代'未定义的“

不幸的是,sjcl documentation缺少关于如何处理其加密数据的信息。 他们的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 

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

回答

1

加密/解密的工作原理与默认参数:

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个字节,或者简单地是块大小。

+1

我的问题是,我没有看到,结果是一个已经字符串化JSON,而不是一个对象。 我试图访问ct。 而在另一种情况下,我覆盖了几个已经在结果集中的参数。 感谢您指点我正确的方向。 – 2015-02-06 14:20:58

1

在我的例子,问题是,我试图存取权限result.ct,但结果是stringified JSON所以访问它的属性ct明显返回undefined

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

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

相关问题