gpt4 book ai didi

python - AES-GCM 模式的正确 nonce/iv 大小

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:08 38 4
gpt4 key购买 nike

编辑:问题可以简化为这样:以下 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 位 key 和消息,并返回 128 位随机数、128 位标签和密文。

(加密代码取自 this example )

我正在使用默认的 Node.js crypto 进行解密图书馆。该库需要一个 session key 、一个标签和一个 IV。当我从 Python 库传递随机数作为 IV 时,它给出了“无效的 iv 大小”错误。 Examples Node 库似乎使用 12 个字符的字符串作为 IV。

我的解密代码如下所示(取自 here ):

var decipher = crypto.createDecipheriv(algorithm, password, nonce)
decipher.setAuthTag(encrypted.tag);
var dec = decipher.update(encrypted.content, 'hex', 'utf8')

该方案的 IV 和 nonce 有什么区别?我应该如何解决这个问题?谢谢!

最佳答案

事实证明,GCM 的随机数应该是 12 个字节长。我不确定为什么 python 库默认自动生成 16 字节随机数,但您可以生成自己的随机数并在 AES 构造函数中手动指定它,这就是我所做的。整个系统现在运行完美

关于python - AES-GCM 模式的正确 nonce/iv 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44009204/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com