Шифрование AES-256-CBC в PHP и расшифровка в Node.js

моя проблема в том, что я кодирую строку в PHP с модулем m_crypt в aes-256-cbc с base64 следующим образом:

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

Где $ this-> secret – это 32-разрядный ключ aes, а $ data – это строка, которую я хочу зашифровать.

Это отлично работает, текст зашифрован и отправляется на сервер без каких-либо проблем (я проверил это дважды!), И теперь я хочу декодировать все это с помощью Node.JS следующим образом:

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

Где Core.crypto является требованием вызова нормального криптового модуля в Node.JS, строки [0] ['sessionkey'] – это ключ, используемый для шифрования, полученного с помощью запроса mysql, и body.user – это зашифрованная строка PHP по почте ,

Как я уже упоминал, все работает отлично, за исключением этой маленькой дециптической вещи … я искал google и все, и попробовал образец кода, но кажется, что что-то с моим кодом не так.

Related of "Шифрование AES-256-CBC в PHP и расшифровка в Node.js"

Хорошо, я сам это понял. Я забыл установить iv при расшифровке сообщения в Node.js, рабочий код выглядит следующим образом:

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

Надеюсь, это поможет любому в будущем!

С наилучшими пожеланиями