2016-03-30 12 views
-1

ECBモードでAES暗号化を実装しようとしています。コードがあります。ソケットを介してバッファを送信したNodeJSは、バッファではないことをコンソールに伝えます。

function encrypt (key, iv, plaintext) { 
    if(algorithm == 'aes-128-ecb') iv = new Buffer(''); 
    var cipher = crypto.createCipheriv(algorithm, key, iv);  
    cipher.setAutoPadding(true); 
    var ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);   
    return ciphertext; } 

function decrypt (key, iv, ciphertext) { 
    if(algorithm == 'aes-128-ecb') iv = new Buffer(''); 
    var decipher = crypto.createDecipheriv(algorithm, key, iv);  
    decipher.setAutoPadding(true); 
    var plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]); 
    return plaintext; } 

私はこのようなソケットを介してそれを送信バッファ暗号化:

content = AES.encrypt(clients.getKeyOf(clientID), '', _msg); 

      _msg = {clientID: clientID, 
        username: username, 
        timestamp: date.getHours() + ":" + ('0' + date.getMinutes()).slice(-2), 
        isEncrypted: isEncrypted, 
        content: content}; 

clientSocket.write(JSON.stringify(_msg)); 

をそして、私はそれを受け取ると、このようにそれを解読してみてください。

var _msg = JSON.parse(msg); 
_msg.content = AES.decrypt(clients.getKeyOf(_msg.clientID), '', _msg.content); 

私はそれをCONSOLE.LOGしようとした場合受け取ったデータはJSONは、JavaScriptオブジェクトに解析され、それがバッファであると言います。復号化しようとすると、「オブジェクトは文字列でもバッファでもありません」というエラーが表示されます。

+0

Aバッファは、JSONのserialzableではありません、それは次のとおりです。

は、私は次のように、これは、受信したデータから、新しいバッファを作成することで動作するようになりましたか? –

+0

私はそれを文字列化すると、{"Type": "Buffer"、 "Data": "xxxxxx"}が得られます。私はパースや警告に誤りはありません。バッファを送信する最も良い方法は何ですか? @Artjom B. –

答えて

0

バッファーはシリアル化できないことがわかりました。受信して解析したJSONがバッファーだと言っても、バッファーはシリアル化できません。

var buff = new Buffer(_msg.content); 
_msg.content = AES.decrypt(clients.getKeyOf(_msg.clientID), '', buff).toString('utf8'); 
関連する問題