Java bouncy castle DefaultSignatureAlgorithmidifierFinder无此字段错误:gostR3410_94

Java bouncy castle DefaultSignatureAlgorithmidifierFinder无此字段错误:gostR3410_94,java,security,bouncycastle,Java,Security,Bouncycastle,我正在使用BouncyCastle库:bcprov-jdk16-146.jar和bcpkix-jdk15on-1.54.jar。我试着运行下面的代码片段,最后一行抛出一个java.lang.NoSuchFieldError:gostR3410_94我试着研究这个问题,但没有发现任何东西-我不确定为什么会出现这个问题?DefaultSignatureAlgorithmidIdentifierFinder的静态初始值设定项出现错误。使用java8,我在java.security中添加了bouncyc

我正在使用BouncyCastle库:bcprov-jdk16-146.jar和bcpkix-jdk15on-1.54.jar。我试着运行下面的代码片段,最后一行抛出一个
java.lang.NoSuchFieldError:gostR3410_94
我试着研究这个问题,但没有发现任何东西-我不确定为什么会出现这个问题?
DefaultSignatureAlgorithmidIdentifierFinder的静态初始值设定项出现错误。使用java8,我在java.security中添加了bouncycastle作为我的安全提供者

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, "feedback-crypto@bouncycastle.org");

    X500Name subject = x500NameBld.build();

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

    DefaultSignatureAlgorithmIdentifierFinder sigAlgFinder = new DefaultSignatureAlgorithmIdentifierFinder();

这个问题的解决方案是使用Bouncy Castle Provider的早期版本:
bcprov-jdk15on-1.54.jar
。此jar与bcpkix-jdk15on-1.54.jar兼容。较新的jar导致不匹配的
CryptoProObjectIdentifiers
对象标识符。

来自javadocs:“通常,此错误由编译器捕获;只有在类的定义发生不兼容的更改时,此错误才会发生。”您在反射和/或动态类加载方面做了一些有趣的事情吗?没有。它是bouncy castle类的内部。但是我已经解决了我的问题:我需要使用bcprov-jdk15on-1.54.jar-bcprov-jdk16-146.jar不兼容!对不起,我在你的描述中完全没有提到这一点。对请把这个作为答案贴出来。