微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Apache Camel对*.bai.asc文件进行PGP解密

如何解决使用Apache Camel对*.bai.asc文件进行PGP解密

我正在尝试使用 Apache Camel 加密/解密文件

maven 依赖:

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>3.8.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-crypto</artifactId>
        <version>3.8.0</version>
    </dependency>

班级:

public class PGPDecryption {

private final static String FILE = "file:";

public static void decrypt(String secretKey,String keyUserid,String keyPassword,String source,String destination) throws Exception {
    CamelContext camelContext = new DefaultCamelContext();
    camelContext.addRoutes(new RouteBuilder() {
        public void configure() throws Exception {
            final String secretKeyFileName = FILE + secretKey;
            String sourceFile = FILE + source + "?delete=true";
            String destinationFile = FILE + destination;
            
            from(sourceFile).unmarshal().pgp(secretKeyFileName,keyUserid,keyPassword).to(destinationFile);
        }
    });
    camelContext.start();
    Thread.sleep(5000);
    camelContext.stop();
}

public static void encrypt(String publicKey,String destination) throws Exception {
    CamelContext camelContext = new DefaultCamelContext();
    camelContext.addRoutes(new RouteBuilder() {
        public void configure() throws Exception {
            final String publicKeyFileName = FILE + publicKey;
            PGPDataFormat pgp = new PGPDataFormat();
            pgp.setKeyFileName(publicKeyFileName);
            pgp.setKeyUserid(keyUserid);
            pgp.setArmored(true);
            from(FILE + source + "?delete=true").marshal(pgp).to(FILE + destination);
        }
    });
    camelContext.start();
    Thread.sleep(5000);
    camelContext.stop();
}

加密工作正常,但在尝试解密 *.bai.asc 文件时,出现以下异常:

ERROR 2021-03-26 14:44:46,025 [Camel (camel-1) thread #0 - file://C:%5Capp%5Clocalfiles%5Cbofa2sap%5Clocalprocessing%5Cus] [processor: ; event: ] org.apache.camel.processor.errorhandler.DefaultErrorHandler: Failed delivery for (MessageId: 1A1BE2B73B9E33E-0000000000000000 on ExchangeId: 1A1BE2B73B9E33E-0000000000000000). Exhausted after delivery attempt: 1 caught: java.lang.NullPointerException

Message History (complete message history is disabled)
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route1            ] [route1            ] [from[file://C:%5Capp%5Clocalfiles%5Cbofa2sap%5Clocalprocessing%5Cus?delete=tru] [       898]
    ...
[route1            ] [unmarshal1        ] [unmarshal[org.apache.camel.model.dataformat.PGPDataFormat@760da6f2]           ] [         0]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------

java.lang.NullPointerException: null
    at org.apache.camel.support.ResourceHelper.resolveMandatoryResourceAsInputStream(ResourceHelper.java:113) ~[camel-support-3.8.0.jar:3.8.0]
    at org.apache.camel.converter.crypto.PGPDataFormatUtil.determineKeyRingInputStream(PGPDataFormatUtil.java:167) ~[camel-crypto-3.8.0.jar:3.8.0]
    at org.apache.camel.converter.crypto.PGPDataFormatUtil.getPublicKeyRingCollection(PGPDataFormatUtil.java:76) ~[camel-crypto-3.8.0.jar:3.8.0]
    at org.apache.camel.converter.crypto.PGPDataFormat.getPublicKey(PGPDataFormat.java:260) ~[camel-crypto-3.8.0.jar:3.8.0]
    at org.apache.camel.converter.crypto.PGPKeyAccessDataFormat.getSignature(PGPKeyAccessDataFormat.java:520) ~[camel-crypto-3.8.0.jar:3.8.0]
    at org.apache.camel.converter.crypto.PGPKeyAccessDataFormat.unmarshal(PGPKeyAccessDataFormat.java:386) ~[camel-crypto-3.8.0.jar:3.8.0]
    at org.apache.camel.support.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:64) ~[camel-support-3.8.0.jar:3.8.0]
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395) [camel-core-processor-3.8.0.jar:3.8.0]
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) [camel-base-engine-3.8.0.jar:3.8.0]
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60) [camel-base-engine-3.8.0.jar:3.8.0]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:147) [camel-core-processor-3.8.0.jar:3.8.0]
    at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:312) [camel-base-engine-3.8.0.jar:3.8.0]
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:486) [camel-file-3.8.0.jar:3.8.0]
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:240) [camel-file-3.8.0.jar:3.8.0]
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:201) [camel-file-3.8.0.jar:3.8.0]
    at org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:190) [camel-support-3.8.0.jar:3.8.0]
    at org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:107) [camel-support-3.8.0.jar:3.8.0]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_221]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_221]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_221]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_221]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_221]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_221]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_221]
WARN  2021-03-26 14:44:46,034 [Camel (camel-1) thread #0 - file://C:%5Capp%5Clocalfiles%5Cbofa2sap%5Clocalprocessing%5Cus] [processor: ; event: ] org.apache.camel.component.file.GenericFileOnCompletion: Rollback file strategy: org.apache.camel.component.file.strategy.GenericFileDeleteProcessstrategy@3588a239 for file: GenericFile[C:\app\localfiles\bofa2sap\localprocessing\us\radial_us_pdr_20201020071428842.bai.asc]
ERROR 2021-03-26 14:44:46,680 [Camel (camel-1) thread #0 - file://C:%5Capp%5Clocalfiles%5Cbofa2sap%5Clocalprocessing%5Cus] [processor: ; event: ] org.apache.camel.processor.errorhandler.DefaultErrorHandler: Failed delivery for (MessageId: 1A1BE2B73B9E33E-0000000000000001 on ExchangeId: 1A1BE2B73B9E33E-0000000000000001). Exhausted after delivery attempt: 1 caught: java.lang.NullPointerException

我也尝试过使用 PGPDataFormat 进行解密。但我仍然遇到同样的例外。 我在代码中缺少什么?请提出建议。

解决方法

显然我需要添加用于签名的密钥环的文件名(公钥)。这是我设置 PGPDataFormat 的方法:

CamelContext camelContext = new DefaultCamelContext();
    camelContext.addRoutes(new RouteBuilder() {
        public void configure() throws Exception {
            final String publicKeyFileName = FILE + publicKey;
            final String secretKeyFileName = FILE + secretKey;
            final String sourceFile = FILE + source + "?delete=true";
            final String destinationFile = FILE + destination;
            
            PGPDataFormat pgpDataFormat = new PGPDataFormat();
            pgpDataFormat.setKeyFileName(secretKeyFileName);
            pgpDataFormat.setKeyUserid(keyUserid);
            pgpDataFormat.setPassword(keyPassword);
            pgpDataFormat.setArmored(true);
            pgpDataFormat.setSignatureKeyFileName(publicKeyFileName);
            
            from(sourceFile).unmarshal(pgpDataFormat).to(destinationFile);
        }
    });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?