当前位置: 首页 > 知识库问答 >
问题:

Bouncy Castle库生成“java.lang.IllegalArgumentException:Can't encode public Key”

阎成天
2023-03-14
X500Principal subject = new X500Principal("CN=Test V3 Certificate");
PKCS10CertificationRequest kpGen = new PKCS10CertificationRequest("SHA1withRSA", subject, publicKey, null, privateKey);
java.lang.IllegalArgumentException: can't encode public key
    at org.bouncycastle.jce.PKCS10CertificationRequest.<init>(Unknown Source)
    at org.bouncycastle.jce.PKCS10CertificationRequest.<init>(Unknown Source)
    at com.gemalto.nrs.test.KmsTest.generatePCK10(KmsTest.java:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906)
java.lang.ClassCastException: org.bouncycastle.asn1.DERApplicationSpecific cannot be cast to org.bouncycastle.asn1.ASN1Sequence
at org.bouncycastle.jce.PKCS10CertificationRequest.<init>(Unknown Source)
at org.bouncycastle.jce.PKCS10CertificationRequest.<init>(Unknown Source)
at com.gemalto.nrs.test.KmsTest.generatePCK10(KmsTest.java:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)

共有1个答案

薛焱
2023-03-14

生成的公钥和私钥只是DER而不是ASN1

所以在使用它们之前,我必须得到它们的ASN1,这是这个问题的根本原因。

以下调用解决了该问题:

    PublicKey publicKey = RSAtoX509Key.getPublicKey(PUBLIC_KEY.getBytes(), RSA_EXPONENT, "BC");
    PrivateKey privateKey = RSAtoX509Key.getPrivateKey(PRIVATE_KEY.getBytes(), RSA_EXPONENT, "BC");

    public static PublicKey getPublicKey(byte[] modulus, byte[] exponent, String provider) {
        PublicKey publicKey = null;
        try {
            RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(1, modulus), new BigInteger(1, exponent));
            KeyFactory keyFactory = null;
            if(provider != null && !provider.isEmpty()) {
                keyFactory = KeyFactory.getInstance("RSA", provider);
            } else {
                keyFactory = KeyFactory.getInstance("RSA");
            }

            publicKey = keyFactory.generatePublic(pubKeySpec);
        } catch(Exception ex) {
            logger.error(ex.getMessage());
            return null;
        }

        return publicKey;
    }
 类似资料:
  • 我有一个使用BouncyCastle作为安全提供者的应用程序,但是我想切换到另一个直接使用OpenSSL(consecrypt)的应用程序。我遇到的问题是,我正在使用BouncyCastle提供的密钥生成器中的ECDH“密钥”,但在我的其他库中没有类似的密钥生成器。 为了比较这两者,我将使用两种方法解码这些点,输入如下- 为提高可读性而添加换行符 使用BouncyCastle方法- 返回的是。返回

  • 我开始学密码学了。我需要用XML、RSA私钥(证书中不包括的是文件扩展名。key)和证书。cer扩展名生成一个PKCS#7文件。 为此,我使用了一个bouncycastle。 编辑:

  • 问题内容: 我知道以前曾有人问过这个问题,但是我仍不确定我当前项目要使用哪种PDF生成框架。 我的要求 快速生成PDF文档(主要是订单,发票) 基于Java 易于布置 应该是开源的 易于更改布局 很多人似乎都在使用 iText ,但是除了关注点更改之外,我还有其他关注点:在HTML上下文中,有很好的MVC支持,我通常会坚持使用SpringMVC和FreeMarker来分离逻辑和布局。我有点担心,使

  • 我试图用ECDSA和secp256r1曲线(P256)和SHA256算法来生成签名。我也在使用弹力城堡图书馆。下面的代码,

  • 我有一个Web服务,它是一个数字签名(验证pdf,签名pdf)我正在使用库bcpkix-jdk15on-1.54.jar,bcprov-jdk15on-1.54.jar,itextpdf-5.4.0.jar.和作为Weblogic 12c12.2.1.2应用服务器当我在本地测试服务时,一切正常,但当在服务器上测试时,服务返回:java.lang.ClassNotFoundException:org

  • 我正在构建一个github代码的静态库https://github.com/jasenhuang/aswbxml-c。我能够成功地构建库,但当我尝试添加项目时,却出现了一个错误。下面是错误日志。 我曾尝试为Xcode项目更改C++编译器类型,但没有成功。

  • libtool生成.a静态库 在OCStaticLib文件夹中准备OCTest.h和OCTest.m两个简单的类文件 . ├── OCTest.h └── OCTest.m 将OCTest.m编译成.o目标文件 终端进入到同级目录, 执行clang命令 clang -x objective-c \ -target x86_64-apple-macos11.1 \ -fobjc-arc