2016-01-22 2 views
2

Я работаю с библиотеками BouncyCastle: bcprov-jdk16-146.jar и bcpkix-jdk15on-1.54.jar. И я пытаюсь запустить следующий фрагмент кода, где последняя строка бросает java.lang.NoSuchFieldError: gostR3410_94. Я попытался изучить эту проблему, но ничего не нашел - я не уверен, почему я получаю эту проблему? Ошибка возникает в статическом инициализаторе для DefaultSignatureAlgorithmIdentifierFinder. Используя java8, я добавил bouncycastle в качестве моего поставщика безопасности в java.security.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

Nope. Он является внутренним для классных классов замка. Но я выяснил свою проблему: мне нужно было использовать bcprov-jdk15on-1.54.jar - bcprov-jdk16-146.jar несовместим! – Nena

+0

Прошу прощения, я полностью пропустил это в вашем описании. Да. Отправьте это как ответ, пожалуйста. –

ответ

2

Решение этой проблемы заключается в использовании более ранней версии Bouncy Castle Provider: bcprov-jdk15on-1.54.jar. Этот сосуд совместим с bcpkix-jdk15on-1.54.jar. Более новая банка привела к несоответствию идентификаторов объектов CryptoProObjectIdentifiers.

Смежные вопросы