使用 Apache Camel 进行 PGP 加密

PGP Encryption with Apache Camel

我正在尝试使用 PGP Encryption/Decryption 方法和 Apache Camel 来加密和解密文件。

此外,我还安装了 Kleopatra 以生成私钥和 public 密钥。使用 Kleopatra 我已经成功地生成了我的密钥。密钥和 public 密钥在“.asc”扩展名中。

下面是我用来加密文件的一段代码

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public class PGPENC {
    public static void main(String[] args) throws Exception {
        CamelContext camelContext = new DefaultCamelContext();

        camelContext.addRoutes(new RouteBuilder() {
            public void configure() throws Exception {

                String publicKeyFileName = "file:C:\Users\karthick\Desktop\PGP\PGP\Public_Key.asc";
                String keyUserid = "Karthick Sambanghi <karthick88it@gmail.com>";

                from("file:C:\Users\ITSS\karthick\PGP\PGP\IN?noop=true;delete=true").marshal()
                        .pgp(publicKeyFileName, keyUserid).to("file:C:\Users\ITSS\Desktop\PGP\PGP\OUT");

            }
        });

        camelContext.start();

        Thread.sleep(5000);
        camelContext.stop();
    }
}

此处程序成功执行,没有任何错误,但文件未在 OUT 文件夹中加密。无论如何要检查 "camelContext" return 语句是成功还是失败?

以下是当前用于执行程序的库

bcpg-jdk15on-1.52
bcprov-ext-jdk15on-1.57
camel-context-2.22.1
camel-core-2.22.1
camel-crypto-2.19.1
slf4j-api-1.7.25
slf4j-nop-1.7.25

您可以通过在您的程序中添加 org.apache.log4j.BasicConfigurator.configure().

在控制台中启用 camel 日志记录

使用它您可以验证路由是否启动并使用了文件。 所以通过添加一些日志来执行你的程序:

 CamelContext camelContext = new DefaultCamelContext();
    BasicConfigurator.configure();
    camelContext.addRoutes(new RouteBuilder() {

      public void configure() throws Exception {

        String publicKeyFileName = "file:C:\LocalData\Keys\pgp_public.asc";
        String keyUserid = " ";

        from("file:C:\Test\Test\IN")
            .log("file received")
            .marshal().pgp(publicKeyFileName, keyUserid)
        .to("file:C\Test\Test\OUT");

      }
    });
    camelContext.start();
    Thread.sleep(30000);
    camelContext.stop();
  } 

我注意到路由正在启动,使用 in 文件夹中的文件然后失败,但出现以下异常:

Caused by: java.lang.NoSuchMethodError: org.bouncycastle.openpgp.PGPPublicKeyRingCollection.<init>(Ljava/io/InputStream;)V
    at org.apache.camel.converter.crypto.PGPDataFormatUtil.findPublicKey(PGPDataFormatUtil.java:64)
    at org.apache.camel.converter.crypto.PGPDataFormatUtil.findPublicKey(PGPDataFormatUtil.java:54)
    at org.apache.camel.converter.crypto.PGPDataFormat.marshal(PGPDataFormat.java:64)
    at org.apache.camel.processor.MarshalProcessor.process(MarshalProcessor.java:59)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)

这是 Camel 文档中的错误,请在此处找到详细信息: https://jira.apache.org/jira/browse/CAMEL-12574