Node.js v10.16.0 реализация AES 256 CTR дешифрования с использованием PHP - PullRequest
0 голосов
/ 18 марта 2020

Ключ, который я должен использовать для расшифровки, - это строка длиной 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);
...