Является ли IV сохранением в качестве одноразового номера? Попытка перенести некоторый код go на узел - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь перенести некоторый код go на узел, но я застрял с дешифрованием с помощью AES.

Я заметил, что Node ожидает «IV», но код go использует «nonce» -это одно и то же? Функция go encrypt создает случайный одноразовый номер и добавляет его к зашифрованным данным. Поэтому я подумал, может быть, это IV?

Это код go:

func decrypt(bytes []byte) ([]byte, error) {
    if len(bytes) < aes.BlockSize {
        return nil, fmt.Errorf("invalid contents")
    }

    block, err := aes.NewCipher(cs.aesKey)
    if err != nil {
        return nil, fmt.Errorf("unable to create AES cipher: %v", err)
    }

    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return nil, fmt.Errorf("unable to create GCM cipher: %v", err)
    }

    out, err := gcm.Open(nil, bytes[:gcm.NonceSize()], bytes[gcm.NonceSize():], nil)
    if err != nil {
        return nil, fmt.Errorf("decryption failure: %v", err)
    }

    return out, nil
}

Вот что у меня есть:

const fs = require('fs');
const crypto = require('crypto');
var algorithm = 'aes-256-gcm';
const key = "testertls-1234567890-test1tls-32";

fs.readFile('CRT.raw2', (err, data) => {
  var dec = decrypt(data);
  console.log("result", dec);
})

function decrypt(enc) {
  let iv = Buffer.from(enc.slice(0,12));
  let encryptedText = Buffer.from(enc.slice(12));
  let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), iv);
  let decrypted = decipher.update(encryptedText);
  decrypted = Buffer.concat([decrypted, decipher.final()]);
  return decrypted.toString();
}

Я продолжаю получатьошибка Ошибка: неподдерживаемое состояние или невозможно подтвердить подлинность данных - есть идеи, что я делаю неправильно?

...