2015-02-06 116 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/

相關問題