2017-07-18 62 views
0

我在嘗試使用SJCL庫進行簡單解密時遇到問題。我可以很好地加密數據。SJCL庫解密問題

在這個例子中我已保存的加密數據如下所示:

encdata = sjcl.encrypt($('input[name="pass"]').val(), $('textarea[name="cleartxt"]').val()); 

我Ajax中的數據從一個數據庫。現在,當我去解密數據,我拉sjcl JSON字符串從我的數據庫,並通過此功能運行:

function decryptdata(encdata) { 
    var dpassword = prompt('Decryption Password'); 
    console.log(sjcl.decrypt(dpassword, encdata)); 
    //$('.decrypted').html(dec); 
} 

我得到的控制檯上看到以下錯誤,也不會超出sjcl進步。解密語句。

sjcl.js:57 Uncaught TypeError: a.replace is not a function 
at Object.decode (sjcl.js:57) 
at Object.decrypt (sjcl.js:56) 
at decryptdata (my.js:72) 
at my.php?r=test:13 

當然,我在這裏做的東西明顯錯了嗎?

+0

只需使用HTTPS,就不需要自己加密密碼。 – zaph

+0

他沒有對密碼進行加密,而是對給定的明文進行加密。 你可以在輸入數據後輸出encda​​ta和dpassword的值(例如數據)嗎? – Nils

回答

1

我設法解決了我的問題。基本上是兩三個問題。因爲PHP提取函數剝離了加密字符串中的「+」,所以在我將它發送到執行數據庫插入的php腳本之前,我需要在參數上做一個jquery「encodeURIComponent」。

第二個問題是不得不使用PHP rawurldecode(而不是urldecode)將字符串恢復爲帶有「+」字符的ajax格式,而不是「」。

第三個問題是使用jquerys「JSON.stringify」將它從一個javascript'對象'轉換爲sjcl.decrypt可以使用的字符串。原來的JavaScript錯誤現在有道理!