Java 使用apachecamel的PGP加密
我正在尝试使用ApacheCamel的PGP加密/解密方法对文件进行加密和解密 此外,我还安装了Kleopatra来生成私钥和公钥。使用Kleopatra,我成功地生成了我的密钥。密钥和公钥位于“.asc”扩展名中 下面是我用来加密文件的一段代码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
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)