Java Camel-PGP加密和对称密钥

Java Camel-PGP加密和对称密钥,java,encryption,apache-camel,pgp,openpgp,Java,Encryption,Apache Camel,Pgp,Openpgp,我的问题是camel pgp实际上是如何工作的,如果我的推断是正确的,我不是java程序员,所以请注意,下面的一些文本可能没有意义 它是否使用对称密钥加密有效负载,然后使用公钥加密对称密钥,并将两者发送到目的地(例如ftp服务器),目的地随后解密对称密钥(会话密钥),然后使用它解密有效负载?或者它用pub密钥加密有效负载,就这样?此外,是否每个消息都会生成任何密钥?换句话说,假设我们在一个目录中有20个文件,camel一个接一个地处理它们,这是否意味着对称密钥将被生成20次,还是只生成一次,然后

我的问题是camel pgp实际上是如何工作的,如果我的推断是正确的,我不是java程序员,所以请注意,下面的一些文本可能没有意义

它是否使用对称密钥加密有效负载,然后使用公钥加密对称密钥,并将两者发送到目的地(例如ftp服务器),目的地随后解密对称密钥(会话密钥),然后使用它解密有效负载?或者它用pub密钥加密有效负载,就这样?此外,是否每个消息都会生成任何密钥?换句话说,假设我们在一个目录中有20个文件,camel一个接一个地处理它们,这是否意味着对称密钥将被生成20次,还是只生成一次,然后重新使用


我正在试图找到加密消息的最佳解决方案,似乎只使用对称密钥(AES)就足够了,因为我可以通过一个安全通道传输一次,就是这样,但是与PGP相比,实现起来似乎很痛苦(我必须实现一个Java工具来生成、保存到文件并加载AES密钥、使用初始化向量、HMAC等),但另一方面,如果后者每次都创建不同的密钥,那么在我的情况下效率会很低。

在OpenPGP中,您有两种选择,Apache Camel允许这两种选择:

  • 混合加密

    会话密钥(每次生成一个新密钥)使用公共/私有(非对称)加密技术进行加密。然后使用该会话密钥使用对称加密技术对实际信息进行加密

    这种方法结合了公共/私有和对称加密的优点:它支持OpenPGP的高级密钥管理功能,但不会因使用公共/私有密钥加密加密大量数据而产生巨大的成本

    每次生成新的、随机的会话密钥非常便宜,因为这些密钥大部分是随机的数据块,并且不像公钥/私钥对那样涉及复杂的计算

    使用GnuPG(可能还有所有其他实现),默认情况下在使用
    gpg--encrypt
    时使用此方法。如果指定收件人的公钥,并且没有密码短语,则将使用此方法

  • 对称加密

    OpenPGP还允许从直接用于对称加密的密码短语直接生成会话密钥。这将禁用OpenPGP的密钥管理功能。OpenPGP很少使用直接对称加密,但有时可能很方便

    使用GnuPG,可以通过调用
    gpg--symmetric
    来实现这一点。如果您加密(并且不签名),但要求您提供密码短语,则可能会使用对称加密

在OpenPGP中,从未使用公钥/私钥加密直接加密输入