Я пытаюсь перенести некоторый код 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();
}
Я продолжаю получатьошибка Ошибка: неподдерживаемое состояние или невозможно подтвердить подлинность данных - есть идеи, что я делаю неправильно?