Крипто модуль Nodejs v7x возвращает плохую расшифровку - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь зашифровать, расшифровать простой текст с помощью Nodejs v7, используя его модуль crypto.

Я выбрал алгоритм aes 256 cbc

Из документации японимать, что

  1. Лучше использовать crypto.createCipheriv(algorithm, key, iv), чем crypto.createCipher(algorithm, password) (то же самое для расшифровки объекта)
  2. iv (или salt) может быть сгенерированоmySalt = crypto.randomBytes(16)
  3. Затем ключ может быть сгенерирован с помощью var myKey = crypto.pbkdf2Sync('secret', mySalt, 100000, 32, 'md5')

Мой полный фрагмент кода выглядит следующим образом:

//generate salt (iv) and key
var mySalt = crypto.randomBytes(16)
var myKey = crypto.pbkdf2Sync('secret', mySalt, 100000, 32, 'md5');

//create cypher object and encrypt a text
var myCipher = crypto.createCipheriv('aes-256-cbc',myKey,mySalt)
let myEncrypted = myCipher.update('some clear text data', 'utf8', 'hex');
myEncrypted += myCipher.final('hex')

//create decipher object and decrypt a myEncrypted
var myDecipher = crypto.createDecipher('aes-256-cbc',myKey,mySalt)
var myDecrypted = myDecipher.update(myEncrypted, 'hex', 'utf8');
myDecrypted += myDecipher.final('utf8')

Фаза шифрования работает какОжидается, никаких ошибок не было.Однако в фазе дешифрования возникла ошибка (в самой последней строке):

Ошибка: ошибка: 06065064: подпрограммы цифрового конверта: EVP_DecryptFinal_ex: плохая расшифровка в Decipher.final (внутренняя / крипто / шифр).js: 164: 28)

Я уже провел множество исследований по этому вопросу, включая похожие вопросы по SO.Кроме того, попытка decrypt.setAutoPadding(false) не работает.

...