Java AES-GCM中AAD的使用

Java AES-GCM中AAD的使用,java,authentication,encryption,aes-gcm,Java,Authentication,Encryption,Aes Gcm,我正在用Java做一个有趣的加密项目。 我正在努力理解其他相关数据的使用。从密码文档和进一步的在线研究中,我了解到AAD被附加到加密的数据中并经过验证,但不是加密的。因此,它们应该在没有encrytpion密钥的情况下可读。但我不明白为什么,因为它们似乎是在密码初始化之后检索的,所以需要加密密钥! 有人能帮我吗? 提前谢谢大家 好吧,我终于抓住了。AAD提供给密码,但不会成为密码输出的一部分!所以我必须分开储存和处理它们。然后,当我开始解密时,如果它们已经被破坏,解密将无法工作。现在我一切都清楚

我正在用Java做一个有趣的加密项目。 我正在努力理解其他相关数据的使用。从密码文档和进一步的在线研究中,我了解到AAD被附加到加密的数据中并经过验证,但不是加密的。因此,它们应该在没有encrytpion密钥的情况下可读。但我不明白为什么,因为它们似乎是在密码初始化之后检索的,所以需要加密密钥! 有人能帮我吗?
提前谢谢大家

好吧,我终于抓住了。AAD提供给密码,但不会成为密码输出的一部分!所以我必须分开储存和处理它们。然后,当我开始解密时,如果它们已经被破坏,解密将无法工作。现在我一切都清楚了。很抱歉浪费了您的时间:)

“因为它们似乎是在密码初始化之后检索到的”-我不明白这怎么可能。API没有提供这一点。我只知道
updateAAD
。你能显示你遇到问题的代码吗?在解密过程中,需要提供额外的经过身份验证的数据。但您无法检索它。我还没有代码要显示,因为我正在尝试先了解AAD是如何工作的。我自己只知道updateAAD,但我说过,如果密码没有初始化,它将不起作用。顺便说一句,这将在PHP7.1中更改:不必抱歉,我来到这里的想法完全相同。我仍然不能完全确定,如果它不可检索,为什么它不加密,这似乎有点毫无意义。这是针对特定应用程序的文档,但有些帮助:(兰特:我对使用基本密码原语有多困难感到恼火。从随机网站和匿名陌生人那里搜集代码片段和解释,用几十行配置拼凑代码,似乎是一种非常糟糕的安全加密方式。在这种情况下,我们怎么能不在安全性方面吃力?)另外:我的印象是,AAD基本上是一个可选的额外密钥,它是可选的秘密密钥,可用于帮助验证解密的情况,如用户名或协议版本,与其说是一种基本机制,不如说是一种方便。