【发布时间】:2021-05-22 19:35:35
【问题描述】:
我正在尝试实现 AES-GCM 加密,但是当涉及到
cipher.Encrypt(_iv, toEncrypt, cipherText, tag, associatedData);
我意识到我还需要实现关联数据,这是一个 byte[] 数据类型,有人知道 AAD 部分应该来自哪里吗?
【问题讨论】:
-
可能与stackoverflow.com/a/60891115/706456 相关,但此处未使用 ADD(为空)。文档说它必须在解密阶段出现。添加它应该是微不足道的:只需传递 ADD 的纯文本 byte[]。在解密期间为 ADD 传递相同的值。
-
AAD 是不会加密但会受到完整性保护的数据。如果您不需要该功能,请不要使用它。它是可选的。 AAD 需要单独发送,因为它不是密文的一部分。
-
嘿@ArtjomB。所以你的意思是如果我需要 AAD 部分,我应该将 NULL 传递给 Encrypt 函数,然后将该 AAD 部分作为纯文本添加到最后(基本上 AAD 是纯文本中 while 消息的长度,它是 4 个字节)
-
嘿@oleksii 这是否意味着如果我需要 AAD 部分,我应该将 NULL 传递给 Encrypt 函数(因为我们不应该加密 AAD 部分)然后将 AAD 部分作为纯文本添加到最后(基本上 AAD 是纯文本中整个消息的长度,它应该是一个 4 字节的数组)
-
不,我完全不是这个意思。如果您的用例(为什么首先要加密)没有任何其他需要完整性保护但未加密的数据,那么您只需跳过
associatedData值。 AAD 是associatedData
标签: c# encryption ssh aes-gcm