Я пытаюсь зашифровать, расшифровать простой текст с помощью Nodejs
v7, используя его модуль crypto
.
Я выбрал алгоритм aes 256 cbc
Из документации японимать, что
- Лучше использовать
crypto.createCipheriv(algorithm, key, iv)
, чем crypto.createCipher(algorithm, password)
(то же самое для расшифровки объекта) iv
(или salt
) может быть сгенерированоmySalt = crypto.randomBytes(16)
- Затем ключ может быть сгенерирован с помощью
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)
не работает.