Crittografia AES-256-CBC in PHP e decodifica in Node.js

il mio problema è che io codifico una string in PHP con il module m_crypt in aes-256-cbc con base64 come questo:

function encrypt($data) { if(32 !== strlen($this->secret)) $this->secret = hash('SHA256', $this->secret, true); $padding = 16 - (strlen($data) % 16); $data .= str_repeat(chr($padding), $padding); $encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->secret, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16)); return base64_encode($encrypt); } 

Dove $ this-> secret è una chiave aes a 32 bit e $ data è la string che voglio crittografare.

Funziona bene, il text è crittografato e inviato al server senza problemi (l'ho controllato due volte!) E ora voglio decodificare tutto con Node.JS in questo modo:

  var decipher = Core.crypto.createDecipher('aes-256-cbc', rows[0]['sessionkey']); decipher.update(body.user, 'base64', 'utf8'); var user = decipher.final('utf8'); 

Dove Core.crypto è la chiamata richiesta del normale module crittografico in Node.JS, le righe [0] ['sessionkey'] sono la chiave utilizzata per la crittografia ricevuta tramite la richiesta mysql e body.user è la string crittografata di PHP invia tramite richiesta post .

Come ho detto, tutto funziona bene, tranne che per questa piccola cosa del decifratore … ho cercato su google e tutto e ho provato il codice di esempio, ma sembra che qualcosa con il mio codice non sia corretto.

Ok, l'ho capito da solo. Ho dimenticato di impostare iv durante la decodifica del messaggio in Node.js, il codice funzionante ha il seguente aspetto:

 var key = new Buffer(rows[0]['sessionkey'], 'binary'); function decipher(key, data) { var decipher = Core.crypto.createDecipheriv('aes-256-cbc', key.toString('binary'), str_repeat('\0', 16)); decipher.update(data, 'base64', 'utf8'); return decipher.final('utf8'); } 

Spero che questo possa aiutare chiunque in futuro!

I migliori saluti