如何在 AES 加密中用随机数解密

nit*_*rma 3 encryption cryptography aes nonce

我是密码学的新手。我需要使用具有某些配置的 AES 加密文本

Encryption mode: GCM
Key size: 256 bits
Nonce size: 96 bits
MAC size: 128 bits
Run Code Online (Sandbox Code Playgroud)

由于 AES 是一种对称算法。所以我有一个秘密钥匙。我用谷歌搜索并发现

nonce 是一个随机数,用于确保消息是唯一的

但我有疑问,如果 nonce 是随机数,我该如何进行解密。我是否需要将随机数与每个加密一起存储。或者我需要使用密钥拆分 nonce、cipher 和 mac 的任何其他方式。我如何使用提供的配置进行加密。

gus*_*to2 8

但我有疑问,如果 nonce 是随机数,我该如何进行解密。我是否需要将随机数与每个加密一起存储。

是的,存储/发送的加密结果是随机数、密文、mac。

如果 nonce 是随机数,我如何执行解密

加密输入时随机生成随机数,然后随机数随密文传递(通常随机数作为第一个块被添加)。实际上,解密时您需要相同的随机数值,然后随机数是解密输入的一部分,而不是随机数

或者我需要使用密钥拆分 nonce、cipher 和 mac 的任何其他方式。我如何使用提供的配置进行加密。

加密文档或加密的 XML 消息有一种标准化的消息格式,但这些都非常复杂。

实际上 - 对于更简单的应用程序,我们经常看到加密输出组成IV || ciphertext || MAC (作为串联)。IV和MAC是固定长度的,可以剪下来用参数解密。

解密发生在不同的机器和语言上。他们只共享了一个加密密钥。他们用于解密的相同密钥。如果我将任何随机值添加为 nonce 那么嘿将如何知道我对 nonc 使用了什么逻辑

在您提供相同的输入之前,这并不重要。如前所述 - 您可以将 IV(随机数)作为消息的一部分传递,并在解密之前将随机数和原始密文分开。

顺便说一句:我链接了一些加密示例


Woo*_*ock 5

准确地说,随机数必须与密文一起存储。

请记住,随机数作为密文的一部分并不会给攻击者带来任何优势。

来自维基百科

初始化 向量与密钥具有不同的安全要求,因此 IV 通常不需要保密。然而,在大多数情况下,重要的是初始化向量永远不会在同一密钥重复使用。对于 CBC 和 CFB,重用 IV 会泄露有关第一个明文块以及两个消息共享的任何公共前缀的一些信息。

初始化向量的目的是在加密过程中插入一些随机性,以便攻击者无法知道何时使用相同的密钥对两个相同的明文消息进行了加密。

解密需要IV,您只需将其与密文连接起来发送即可。

IV || ciphertext

事实上,传输初始化向量的最常见方法是将其直接添加到密文之前。