2016-03-30 2 views
-1

Я пытаюсь реализовать шифрование AES в режиме ECB. Есть код.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); 

полученные для данных JSON разобран на объект JavaScript, если я пытаюсь console.log, он говорит, что это буфер. Когда я пытаюсь расшифровать его, ошибка говорит: «Объект - это не строка или буфер».

+0

буфер не JSON serialzable, это? –

+0

Когда я строкую его, я получаю {«Тип»: «Буфер», «Данные»: «xxxxxx»}. Я не получаю ошибку при разборе или любом предупреждении. Каков наилучший способ отправки буферов? @Artjom B. –

ответ

0

Теперь мне ясно, что буфер не является сериализуемым, даже если он получен и проанализирован. JSON говорит, что это буфер, который не распознается как один.

я получил эту работу, сделав новый буфер из полученных данных следующим образом:

var buff = new Buffer(_msg.content); 
_msg.content = AES.decrypt(clients.getKeyOf(_msg.clientID), '', buff).toString('utf8'); 
Смежные вопросы