私はサーバに送信するnode-forgeのクライアント側のデータをmongoDBコレクションに格納するように暗号化しています。サーバは空文字列を受け取っていますが、クライアントには正しいデータが表示されます
私の問題は、クライアント側でデータを生成できるにもかかわらず、サーバーは空の文字列を受け取るだけです。
jQueryのコードが正しくencryptedForm.test.data
をログに記録するにもかかわらず
$('#recordForm').submit(function(event) {
// Stop form from submitting normally
event.preventDefault();
var $form = $(this),
_id = $form.find("input[name='_id']").val();
// Grab form data
// Crypto
const params = generateParams();
const encryptedForm = {
test: encrypt(params, _id),
}
console.log(encryptedForm.test.data); // correctly logs à:û^ìQ%
const decryptedForm = {
test: decrypt(params, encryptedForm.test).data,
}
console.log("Decrypted text: " + decryptedForm.test);
url = $form.attr("action");
// Send the data using post
$.post(url, {id: encryptedForm.test.data});
});
あるreq.body
のログイン時に、サーバーは、ちょうど戻って
{ id: '' }
を受けます。
は私がChromeの開発ツールを使用してみました、とencryptedForm.test
をログに記録する
""
などのデータを示し、この
ByteStringBuffer {data: "ÐæáÁþà", read: 0, _constructedStringLength: 8}
data:""
read:0
_constructedStringLength:8
__proto__: Object
をログに記録しています。これはサーバが""
を見ることを説明することができますが、なぜconsole.log(encryptedForm.test.data)
は正しくログà:û^ìQ%
を記録しますか?
私は間違っていますか?
EDIT:明確化
// Encrypt under symmetric key
function encrypt(params, m) {
var cipher = forge.rc2.createEncryptionCipher(params.key);
cipher.start(params.iv);
cipher.update(forge.util.createBuffer(m));
cipher.finish();
return cipher.output;
}
'encrypt()。data'がJSオブジェクトを返すのですか?この名前から、エンコードされた文字列/バイナリデータが返されていることを暗示します。したがって、 –
の問題は、次のようにしてください: '$ .post(url、{id:encodeURIComponent(encryptedForm.test.data)}); ' –
' $。 post(url、{id:encodeURIComponent(encryptedForm.test.data)}); 'も動作しませんでした。私は 'encrypt()'が 'ByteStringBuffer'を見ることができる開発者ツールからオブジェクトを返すと思います。 – mcansado