当前位置: 首页 > 知识库问答 >
问题:

适用于AES-GCM模式的正确Nonce/IV大小

法浩壤
2023-03-14

编辑:问题可以简化为:下面的Node.js代码给出了一个“无效的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位nonce、128位标记和密文。

(加密代码取自本例)

我用默认的node.js加密库解密。该库需要一个会话密钥、一个标记和一个IV。当我将Python库中的nonce作为IV传递时,它会给我一个“无效的IV size”错误。节点库的示例似乎使用12个字符的字符串作为IV。

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

对于这个方案,IV和nonce有什么不同?我该如何解决这个问题?谢了!

共有1个答案

岳鸿畴
2023-03-14

原来GCM的nonce应该是12字节长。我不知道为什么python库默认自动生成16字节的nonce,但是您可以生成自己的nonce,并在AES构造函数中手动指定它,所以我就是这么做的。整个系统现在工作得很完美

 类似资料:
  • 首先,我已经成功地使用Java(JDK 8)编写了使用进行加密和解密的代码。 但我想知道这是否是AES,那么如何使用GCM这样的模式来检查完整性。 另一方面,我能够将与结合使用。表示密钥是使用带有HMACSHA256的PBKDF2生成的,用于AES/GCM。 > 但我正在努力寻找使用生成密钥的源代码,并使用AES/GCM,或者即使这是可能的,或者它是否有意义? 其次,使用PBEWithHmacSH

  • 我正在尝试与一个使用AES-GCM的现有设备进行接口,该设备具有4字节的nonce(UInt32)。这是一个简单的增量计数器,每次发生操作时都会增加:

  • 问题内容: 我在下面的(E.1)中使用它来进行我的应用程序,显然我认识并理解了其中的一个巨大的安全漏洞。我对加密越来越感兴趣,并且想更好地理解它,我需要随IV一起生成一个随机密钥,但是不确定如何正确地执行此操作。有人可以向我解释一下熟悉AES加密的工作原理(IV和KEY)吗? )因此,我将来能够更好地理解并可以运用我的知识,本质上,我只是想使代码更安全,谢谢。 (E.1) 问题答案: AES密钥仅

  • 我在下面(E.1)中使用它作为我的应用程序,显然有一个我认识和理解的巨大的明显的安全漏洞。我对加密越来越感兴趣,想更好地理解它,我需要生成一个随机密钥和一个IV,但不确定如何正确地执行。有人能向我解释一下熟悉AES加密的人是如何工作的吗? (E.1)

  • 问题内容: 我通常在Python脚本中使用以下shebang声明: 最近,我遇到了这个shebang声明: 在脚本文档中,已指出使用此表单“更具可移植性”。 这个声明是什么意思?路径中间为什么会有空间?它实际上有助于提高可维护性吗? 问题答案: 之所以具有更高的可移植性,是因为该程序通常可用于在没有完整路径的情况下“激活”所需的命令。 否则,您将必须指定Python解释器的完整路径,该路径可能有所