2017-08-21 1 views
0

私はサーバに送信する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; 
} 
+0

'encrypt()。data'がJSオブジェクトを返すのですか?この名前から、エンコードされた文字列/バイナリデータが返されていることを暗示します。したがって、 –

+0

の問題は、次のようにしてください: '$ .post(url、{id:encodeURIComponent(encryptedForm.test.data)}); ' –

+0

' $。 post(url、{id:encodeURIComponent(encryptedForm.test.data)}); 'も動作しませんでした。私は 'encrypt()'が 'ByteStringBuffer'を見ることができる開発者ツールからオブジェクトを返すと思います。 – mcansado

答えて

0

ための暗号化()のコードを追加するには掲載されなければならないいくつかのプレーンテキストを、投稿してみてください。送信している文字に間違っている可能性があります。対応していません。

url = $form.attr("action"); 
    // Send the data using post 
    $.post(url, {id: 'hello'}); 
0

すべてを16進数に変換して修正することができました。

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.toHex(); 
} 

復号化に使用できるオブジェクトに16進数を変換する方法があります。

このように、すべてが暗号化と復号化のために偽造で動作し、サーバーは正しい値を受け取ります。

関連する問題