Java 使用apachecamel的PGP加密

Java 使用apachecamel的PGP加密,java,encryption,apache-camel,pgp,openpgp,Java,Encryption,Apache Camel,Pgp,Openpgp,我正在尝试使用ApacheCamel的PGP加密/解密方法对文件进行加密和解密 此外,我还安装了Kleopatra来生成私钥和公钥。使用Kleopatra,我成功地生成了我的密钥。密钥和公钥位于“.asc”扩展名中 下面是我用来加密文件的一段代码 import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelC

我正在尝试使用ApacheCamel的PGP加密/解密方法对文件进行加密和解密

此外,我还安装了Kleopatra来生成私钥和公钥。使用Kleopatra,我成功地生成了我的密钥。密钥和公钥位于“.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();
    }
}

您可以通过在程序中添加
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文件夹中的文件,然后失败,例外情况是:

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)
原因:java.lang.NoSuchMethodError:org.bouncycastle.openpgp.pgppubliceRingCollection.(Ljava/io/InputStream;)V
位于org.apache.camel.converter.crypto.PGPDataFormatUtil.findPublicKey(PGPDataFormatUtil.java:64)
位于org.apache.camel.converter.crypto.PGPDataFormatUtil.findPublicKey(PGPDataFormatUtil.java:54)
位于org.apache.camel.converter.crypto.PGPDataFormat.marshal(PGPDataFormat.java:64)
位于org.apache.camel.processor.marshallprocessor.process(marshallprocessor.java:59)
位于org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
这是Camel文档中的一个错误,请在此处查找详细信息:

切勿混合驼峰依赖项的版本,这些组合未经测试。您需要使用与
驼峰核心
版本相同的
驼峰加密
。同样不确定的是,您试图对组合
noop=true
delete=true
执行什么操作,这些选项是无效的。参数之间应该用
分隔,而不是
。而
slf4j nop
是nop,所以camel记录的任何错误都会被丢弃,并且永远不会打印到控制台。很抱歉告诉你,这篇文章在很多方面都是错误的,你应该找到一个更好的来源——比如官方文档,或者GitHubbela上提供的单元测试。我试过使用相同版本的库,但问题仍然存在。最后,我尝试了Github()的另一篇文章,它运行良好。您能够加密或解密吗?谢谢您的精彩解释。
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)