java - 使用 Apache Camel 进行 PGP 加密

标签 java encryption apache-camel pgp openpgp

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

此外,我还安装了Kleopatra来生成私钥和公钥。使用 Kleopatra 我已经成功生成了我的 key 。 key 和公钥的扩展名为“.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”返回语句是成功还是失败?

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

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() 来在控制台中启用驼峰日志记录。

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

 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 文件夹中的文件,然后失败,但有异常(exception):

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

关于java - 使用 Apache Camel 进行 PGP 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57574224/

相关文章:

java - GlassFish 为了防止内存泄漏,已强制注销 JDBC 驱动程序

security - 加密能保证完整性吗?

iOS 核心数据加密

java - 通过 HTTPS 网络加密/解密

java - Apache Camel RouteBuilder 不启动 configure()

java - Libgdx - 减慢射弹停止,然后反转它

java - 多线程环境下的系统恢复

java - 将 Java 对象图保存为 XML 文件

java - 如何使线程/作业等待,直到上一个作业完成,然后在某个通知上恢复它

java - 如何在没有 XML 的情况下将 Camel 与 Spring 一起使用