这是我的代码
const crypto = require('crypto')
const algorithm = 'aes-256-cbc';
const key = 't\ufffdy\u0005\ufffdH\ufffd\u0015\ufffdCh\ufffdı\ufffd\ufffd\ufffd>\ufffd(d\ufffd3\ufffd\ufffd\ufffd\ufffd\ufffd\' 4'
const iv = '\u0005\ufffd\ufffd\ufffd\ufffdKV`\u0007z\ufffd\"H\ufffd\u0013\ufffd'
exports.postMessage = (req,res,next) =>{
// var buf= Buffer.from(crypto.randomBytes(16)).toString()
// return res.json(iv.length)
function encrypt(text) {
let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(key), iv);
let encrypted = cipher.update(text);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return res.json({ iv: iv.toString('hex').slice(0, 16), encryptedData: encrypted.toString('hex') });
}
encrypt('some text')
}
错误:错误:无效的IV长度在Cipheriv.createCipherBase(内部/密码/cipher.js:79:18)在Cipheriv.createCipherWithIV(internal / crypto / cipher.js:115:20)在新的Cipheriv上(internal / crypto / cipher.js:217:22)在Object.createCipheriv(crypto.js:109:10)
AES之后的256表示密钥大小而不是块大小。 AES具有128位,192位和265位大小,并且始终具有128位块大小。当您使用需要IV随机化加密的CBC模式时,IV大小等于块大小。在这种情况下,它是128位,即16字节。因此,请确保您的IV完全为16字节。
如果您只是刚开始一个项目,请不要使用CBC模式,因为它是旧的并且有很多问题。首选经过身份验证的加密模式,例如AES-GCM,它将为您提供机密性,完整性和身份验证。