2017-07-18 18 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

私は私の問題を解決することができました。基本的には2/3の問題でした。 PHP抽出関数が暗号化された文字列内の "+"を取り除いたので、データベースの挿入を行うPHPスクリプトに送る前に、パラメータにjquery "encodeURIComponent"を実行する必要がありました。

2番目の問題は、PHPのrawurldecode(urldecodeとは対照的に)を使用して、文字列を "+"文字で前のajax形式に戻す必要がありました。

第3の問題はjquerys "JSON.stringify"を使ってjavascriptの 'object'からsjcl.decryptが動作する文字列に変換することでした。元のjavascriptエラーは今や理にかなっています!