Node.js 节点JS-加密/解密

Node.js 节点JS-加密/解密,node.js,encryption,cryptography,Node.js,Encryption,Cryptography,我有这样的加密功能 const encryptWithInitVector = (string, keyBase64, ivBase64) => { const key = Buffer.from(keyBase64, 'base64') const iv = Buffer.from(ivBase64, 'base64') const cipher = crypto.createCipheriv(getAlgorithm(keyBase64), key, iv) let

我有这样的加密功能

const encryptWithInitVector = (string, keyBase64, ivBase64) => {
  const key = Buffer.from(keyBase64, 'base64')
  const iv = Buffer.from(ivBase64, 'base64')

  const cipher = crypto.createCipheriv(getAlgorithm(keyBase64), key, iv)
  let encrypted = cipher.update(string, 'utf8', 'base64')
  encrypted += cipher.final('base64')
  return encrypted
}
它接收要编码的字符串、AESKey和initializationVector

我怎样才能走相反的路?我想解码函数encryptWithInitVector的响应

使用
crypto.createDecipheriv创建解密

const decryptWithInitVector = (string, keyBase64, ivBase64) => {
  const key = Buffer.from(keyBase64, 'base64')
  const iv = Buffer.from(ivBase64, 'base64')

  const decipher = crypto.createDecipheriv(getAlgorithm(keyBase64), key, iv)

  let decrypted = decipher.update(string,'base64','utf-8');
  decrypted += decipher.final('utf-8');
  return decrypted
}

使用
crypto.createDecipheriv创建解密

const decryptWithInitVector = (string, keyBase64, ivBase64) => {
  const key = Buffer.from(keyBase64, 'base64')
  const iv = Buffer.from(ivBase64, 'base64')

  const decipher = crypto.createDecipheriv(getAlgorithm(keyBase64), key, iv)

  let decrypted = decipher.update(string,'base64','utf-8');
  decrypted += decipher.final('utf-8');
  return decrypted
}

根据您的操作模式,对于使用相同密钥的每个加密,IV必须是唯一的(CTR、CFB、OFB)或不可预测的(CBC)。如果你不在应该使用的时候使用唯一的IV,就会出现灾难性的中断,因为现在仅仅通过观察密文就可以推断出明文。IV不应该是秘密的。只需在每次加密过程中生成一个新的随机IV,并将其放在密文前面。然后,您可以在解密期间将其切分。根据您的操作模式,对于使用相同密钥的每次加密,IV必须是唯一的(CTR、CFB、OFB)或不可预测的(CBC)。如果你不在应该使用的时候使用唯一的IV,就会出现灾难性的中断,因为现在仅仅通过观察密文就可以推断出明文。IV不应该是秘密的。只需在每次加密过程中生成一个新的随机IV,并将其放在密文前面。然后,您可以在解密过程中将其切掉。