2016-01-22 83 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導致對象標識符不匹配。