Nodejs createCipher vs createCipheriv

我目前正在尝试使用createCipher来encryption数据,我已经阅读了Node API文档, build议不要使用 createCipher

crypto.createCipher()的实现使用OpenSSL函数EVP_BytesToKey以摘要algorithm设置为MD5的方式派生密钥,一次迭代并且不加盐。 盐的缺乏使字典攻击成为可能,因为相同的密码总是会产生相同的密钥。 低迭代次数和非密码安全散列algorithm允许密码被快速testing。

根据OpenSSLbuild议使用pbkdf2而不是EVP_BytesToKey,build议开发人员使用crypto.pbkdf2()自己派生密钥和IV,并使用crypto.createCipheriv()创buildCipher对象。

createCipher仍然是一个可行的和安全的方式来encryption静止的数据? 该方法是否应该被视为弃用? 信息充分的攻击者是否可以解密数据?

应该使用createCipheriv的解决scheme总是优于createCipher

任何其他细节或build议表示赞赏。

createCipheriv / createDecipheriv当然更好用法示例:

const crypto = require('crypto') function encrypt(text){ var cipher = crypto.createCipheriv('aes-256-cbc', new Buffer('passwordpasswordpasswordpassword'), new Buffer('vectorvector1234')) var crypted = cipher.update(text, 'utf8', 'hex') crypted += cipher.final('hex') return crypted } function decrypt(text){ var decipher = crypto.createDecipheriv('aes-256-cbc', new Buffer('passwordpasswordpasswordpassword'), new Buffer('vectorvector1234')) var dec = decipher.update(text, 'hex', 'utf8') dec += decipher.final('utf8') return dec }