2016-01-22 85 views
2

我正在使用BouncyCastle库:bcprov-jdk16-146.jar和bcpkix-jdk15on-1.54.jar。我试图运行下面的代码片段,最后一行抛出一个java.lang.NoSuchFieldError: gostR3410_94我试图研究这个问题,但没有发现任何东西 - 我不知道为什么我得到这个问题?在DefaultSignatureAlgorithmIdentifierFinder的静态初始化程序中发生错误。使用java8,我也在java.security中添加了bouncycastle作为我的安全提供者。bouncy castle DefaultSignatureAlgorithmIdentifierFinder NoSuchFieldError:gostR3410_94

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 
     KeyPair kp = RSAKeyGenerator.generate2(); 
     AsymmetricKeyParameter privateKey = 
       (AsymmetricKeyParameter) PrivateKeyFactory.createKey(kp.getPrivate().getEncoded()); 
     AsymmetricKeyParameter publicKey = 
       (AsymmetricKeyParameter) PublicKeyFactory.createKey(kp.getPublic().getEncoded()); 


    X500NameBuilder x500NameBld = new X500NameBuilder(RFC4519Style.INSTANCE); 

    x500NameBld.addRDN(RFC4519Style.c, "AU"); 
    x500NameBld.addRDN(RFC4519Style.o, "The Legion of the Bouncy Castle"); 
    x500NameBld.addRDN(RFC4519Style.l, "Melbourne"); 
    x500NameBld.addRDN(RFC4519Style.st, "Victoria"); 
    x500NameBld.addRDN(PKCSObjectIdentifiers.pkcs_9_at_emailAddress, "[email protected]"); 

    X500Name subject = x500NameBld.build(); 

    PKCS10CertificationRequestBuilder requestBuilder = new PKCS10CertificationRequestBuilder(subject, new SubjectPublicKeyInfo(ASN1Sequence.getInstance(kp.getPublic().getEncoded()))); 

    DefaultSignatureAlgorithmIdentifierFinder sigAlgFinder = new DefaultSignatureAlgorithmIdentifierFinder(); 
+0

从javadocs:“通常,编译器会捕获此错误;如果类的定义发生了不兼容的更改,则只能在运行时发生此错误。”你是否在用反射和/或动态类加载进行一些有趣的事情? –

+2

不是。这是充气城堡班的内部。但我已经想通了我的问题:我需要使用bcprov-jdk15on-1.54.jar - bcprov-jdk16-146.jar不兼容! – Nena

+0

对不起,我完全错过了你的描述。是。请将此作为答案发布。 –

回答

2

解决这个问题是使用充气城堡提供的早期版本:bcprov-jdk15on-1.54.jar。这个罐子与bcpkix-jdk15on-1.54.jar兼容。较新的jar导致对象标识符不匹配。