Ключ, который я должен использовать для расшифровки, - это строка длиной 80 символов. Я не могу определить длину iv, необходимую для такого ключа в реализации Node.js.
PHP фрагмент, который я пытаюсь преобразовать в Node.js:
protected function Decryption($theData, $theKey) {
$method = 'aes-256-ctr';
$nonceSize = openssl_cipher_iv_length($method);
$nonce = mb_substr($theData, 0, $nonceSize, '8bit');
$ciphertext = mb_substr($theData, $nonceSize, null, '8bit');
$plaintext = openssl_decrypt( $ciphertext, $method, $theKey, OPENSSL_RAW_DATA, $nonce);
return json_decode($plaintext);
}
Node.js реализация, выдающая ошибку Invalid length:
const crypto = require('crypto');
const nonce = crypto.randomBytes(16).toString('base64');
const decipher = crypto.createDecipheriv('aes-256-ctr', theKey, nonce);
let plainText = decipher.update(theData, 'base64', 'utf8');
plainText += decipher.final('utf8');
console.log(plainText);
Эту проблему можно решить с помощью ключа другой длины, но в этом случае мне нужно использовать 80 символов.
РЕДАКТИРОВАТЬ После обновления, чтобы использовать исправление из Получение ошибки неверной длины IV при использовании aes-256-cb c для шифрования в узле , я получаю ошибку неверной длины ключа с этот код:
const crypto = require('crypto');
var iv = new Buffer(crypto.randomBytes(16))
var nonce = iv.toString('hex').slice(0, 16);
const decipher = crypto.createDecipheriv('aes-256-ctr', theKey, nonce);
let plainText = decipher.update(theData, 'base64', 'utf8');
plainText += decipher.final('utf8');
console.log(plainText);