#node.js #encryption #aes
#node.js #шифрование #aes
Вопрос:
Я пытаюсь зашифровать, расшифровать простой текст с помощью Nodejs
v7, используя его crypto
модуль.
Алгоритм, который я выбрал, является aes 256 cbc
Из документации я понимаю, что
- Лучше использовать
crypto.createCipheriv(algorithm, key, iv)
, чемcrypto.createCipher(algorithm, password)
(то же самое для объекта decipher) 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 (internal/crypto/cipher.js:164:28)
Я уже провел много исследований по этому вопросу, включая аналогичные вопросы по SO. Кроме того, попытка decrypt.setAutoPadding(false)
не сработает.
Комментарии:
1.
crypto.createDecipheriv('aes-256-cbc',myKey,mySalt)
. Вы забываетеiv
.2.
crypto.createDecipheriv
метод принимает только 3 параметра. В моем кодеmySalt
являетсяiv
3. Смотрите , а у вас уже 3 параметра.
4. Я перешел по ссылке и вижу подпись
crypto.createDecipheriv(algorithm, key, iv[, options])
. Поэтому, когда я вызываю его с помощьюcrypto.createDecipheriv('aes-256-cbc',myKey,mySalt)
,mySalt
используется какiv
. Не могли бы вы еще раз рассказать мне, в чем, по вашему мнению, проблема с моим кодом?5. У вас все еще та же проблема?