Расшифровка шифра с помощью aes-256-cbc с использованием iv с использованием криптомодуля nodejs - PullRequest
0 голосов
/ 23 сентября 2018

Я портирую метод шифрования / дешифрования AES-256 python на его эквивалент nodejs. Но при расшифровке шифра возникает ошибка на стороне nodejs.

crypto.js:267
  this._handle.initiv(cipher, toBuf(key), toBuf(iv));
               ^

Error: Invalid IV length
    at new Decipheriv (crypto.js:267:16)
    at Object.createDecipheriv (crypto.js:627:10)
    at CryptoUtils.AESDecrypt

Метод шифрования / дешифрования python:

def AESEncrypt(key, plaintext):
    plaintext = AESPad(plaintext)
    iv = os.urandom(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return iv + cipher.encrypt(plaintext)

def AESDecrypt(key, ciphertext):                        
    iv = ciphertext[:AES.block_size];
    cipher = AES.new(key, AES.MODE_CBC, iv);
    plaintext = cipher.decrypt(ciphertext[AES.block_size:]);
    return AESUnpad(plaintext);

Мои nodejs пытаются преобразовать его:

AESEncrypt(key, plaintext) {
    const _plaintext = this.AESPad(plaintext)
    const iv = crypto.randomBytes(AES_BLOCK_SIZE) //synchronous
    const cipher = crypto
      .createCipheriv("aes-256-cbc", key, iv)
      .update(_plaintext)
    return iv + cipher
  }

AESDecrypt(key, ciphertext) {
    const iv = ciphertext.slice(0, 16)
    console.log("iv", iv)
    const plaintext = crypto
      .createDecipheriv("aes-256-cbc", key, iv)
      .update(ciphertext.substring(16))
    return this.AESUnpad(plaintext)

Что я делаю не так?Моя версия nodejs v8.11.2 и Python 2.7.15rc1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...