2016-03-30 22 views
-1

olmadığını söylüyor ECB modunda AES şifrelemesini uygulamaya çalışıyorum. Kod var.NodeJS, arabelleği soket konsolundan gönderdikten sonra tamponun

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; } 

ben böyle bir soket üzerinden göndermek tampon şifrelediğinizde:

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)); 

Ve sonra da alma ve böyle şifresini deneyin.

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

ve aldıkları verileri JSON bunu console.log çalışırsanız, bunun bir tampon olduğunu söylüyor, bir JavaScript nesnesine ayrıştırılır olduğunu. Şifreyi çözmeyi denediğimde, hata "Nesne bir dizge veya arabellek değil" yazıyor.

+0

A Tampon JSON serialzable değil, öyle:

ben şöyle bu alınan verilerden yeni tampon yaparak çalışmak lazım? –

+0

Düzeltdiğimde, {"Type": "Buffer", "Data": "xxxxxx"}. Parse üzerinde bir hata veya herhangi bir uyarı almıyorum. Buffer göndermenin en iyi yolu nedir? @Artjom B. –

cevap

0

Şimdi, tamponun seri hale getirilemediği anlaşılıyor, alınıp ayrıştırılsa da JSON, bir arabellek olduğu bilinmeyen bir arabellek olduğunu söylüyor.

var buff = new Buffer(_msg.content); 
_msg.content = AES.decrypt(clients.getKeyOf(_msg.clientID), '', buff).toString('utf8'); 
İlgili konular