org.bouncycastle.openpgp.PGPException:无法创建密码:没有这样的算法:RSA / ECB / PKCS1Padding

时间:2017-04-01 05:05:00

标签: java linux encryption bouncycastle pgp

原谅我对加密的无知。我正在尝试使用Bouncy Castle的PGP加密。我能够使用与jar一起打包的示例来创建一个很好的工作解决方案(我想)。一切都很好,我能够使用我的公钥加密和我的私钥解密用于测试目的。当我将更改推送到Linux服务器时出现了问题。一旦更改在linux服务器上,我的decript方法就会抛出'org.bouncycastle.openpgp.PGPException:无法创建密码:没有这样的算法:RSA / ECB / PKCS1Padding'

我发现这非常奇怪,因为我在本地没有问题。我开始打印所有的Security.getProviders()及其算法,看看我是否可以确定远程和本地环境之间的区别。果然,我的本地环境有一个“RSA / ECB / PKCS1Padding”条目,而远程环境却没有。经过大量的谷歌搜索后,很明显,提供'RSA / ECB / PKCS1Padding'算法(sunMSCAPI.jar)的JRE jar只是windows,而不是用jre for linux包装,据我所知。 这是我对于充气城堡的pom.xml:

<dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpg-jdk15on</artifactId>
        <version>1.56</version>
</dependency>

服务器Java信息:

java版“1.8.0_60” Java(TM)SE运行时环境(版本1.8.0_60-b27) Java HotSpot(TM)64位服务器VM(内置25.60-b23,混合模式)

Linux版本: 命令:cat /etc/issue.net |头-1 -

Oracle Linux Server 6.8版

另一个重要的注意事项是它只会抛出GPG v2的异常而不是GPG v1.49。我只注意到这一点,因为我获得了集成合作伙伴和公钥的公钥.asc它说'Version:GnuPG v1.4.9(AIX)'

当我在搜索论坛寻找解决方案时,我正在慢慢地陷入疯狂。我真的很想知道为什么'RSA / ECB / PKCS1Padding'在我的linux服务器上不是一个可用的算法,我应该去哪里寻找解决方案。

这里要求的是违规代码的代码片段:

byte[] bytes = compressFile(tempFile.getAbsolutePath(), CompressionAlgorithmTags.ZIP);

        PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(
                new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5).setWithIntegrityPacket(true)
                        .setSecureRandom(new SecureRandom()).setProvider("BC"));

        encGen.addMethod(new JcePublicKeyKeyEncryptionMethodGenerator(encKey).setProvider("BC"));

        OutputStream tempFileOutputStream = new ArmoredOutputStream(new FileOutputStream(tempFile));

        // This cOut OutputStream is an instance of WrappedGeneratorStream
        // (Bouncy Castle Class)
        // The below code is the offending code
        OutputStream cOut = encGen.open(tempFileOutputStream, bytes.length);

PGPEncryptedDataGenerator类是BouncyCastle类。

0 个答案:

没有答案