编辑:问题可以简化为:以下 Node.js 代码给出“无效的 IV 长度”错误。为什么?IV应该是什么?
const crypto = require('crypto')
const decipher = crypto.createDecipheriv('aes-128-gcm', crypto.randomBytes(16), crypto.randomBytes(16))
我在 GCM 模式下使用 AES 加密一些数据,但我使用两种不同的语言和库进行加密和解密,它们似乎对我需要的内容有不同的词汇表。
我正在使用 Python 库(Crypto)进行加密。该encrypt_and_digest
方法采用 128 位密钥和一条消息,并返回一个 128 位随机数、128 位标记和一个密文。
(取自本例的加密代码)
我正在使用默认的 Node.js加密库进行解密。该库需要一个会话密钥、一个标签和一个 IV。当我将 Python 库中的 nonce 作为 IV 传递时,它给了我一个“invalid iv size”错误。 Node 库的示例似乎使用 12 个字符的字符串作为 IV。
我的解密代码如下所示(取自此处):
var decipher = crypto.createDecipheriv(algorithm, password, nonce)
decipher.setAuthTag(encrypted.tag);
var dec = decipher.update(encrypted.content, 'hex', 'utf8')
这个方案的 IV 和 nonce 有什么区别?我应该如何解决这个问题?谢谢!