java - 编译错误bouncycaSTLe java

标签 java bouncycastle

这是我第一次从事认证工作,对此我完全陌生。 我在编译过程中出错了,我在互联网上找不到任何关于它的信息,也没有发现相同的错误。自 4 天以来,我一直在努力解决这个问题,我什么也做不了 :( 非常感谢您的帮助。谢谢。

这是我的代码: 主类

package tn.ance.signature;
import java.security.*;
import java.security.cert.X509Certificate;
public class main_project {
    public static void main(String[] args) {
        chargement_fichier cf = new chargement_fichier();
        KeyStore ks = cf.charger_fichier();
        char[] password = cf.getPassword();
        // RECUPERATION DU COUPLE CLE PRIVEE/PUBLIQUE ET DU CERTIFICAT PUBLIQUE
        X509Certificate cert = null;
        PrivateKey privatekey = null;
        PublicKey publickey = null;

        recuperation_cles_cert recup =new recuperation_cles_cert(); 
        privatekey = recup.getPrivatekey();
        publickey = recup.getPublickey();
        cert = recup.getCert();

        System.out.println("Private Key Format:");
        System.out.println(privatekey.getFormat());
        System.out.println("Private Key Algorithme:");
        System.out.println(privatekey.getAlgorithm());
        System.out.println("Public Key Format:");
        System.out.println(publickey.getFormat());
        System.out.println("Public Key Algorithme:");
        System.out.println(publickey.getAlgorithm());
        System.out.println("Certification:");
        System.out.println("SubjectDN:");
        System.out.println(cert.getSubjectDN());
        System.out.println("Not After:");
        System.out.println(cert.getNotAfter());
        System.out.println("Not Before:");
        System.out.println(cert.getNotBefore());

    }
}

**

文件上传类

package tn.ance.signature;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class chargement_fichier {
     private char[] password = null;
    // CHARGEMENT DU FICHIER PKCS#12
     public KeyStore charger_fichier(){
            KeyStore ks = null;
            Security.addProvider(new BouncyCastleProvider());
            try {
                ks = KeyStore.getInstance("PKCS12");
                // Password pour le fichier personnal_nyal.p12
                password = "123456".toCharArray();
                FileInputStream fl = new FileInputStream("T:/Stage/150722/syrine.p12");
                ks.load(fl, password);
                return  ks;
            } catch (Exception e) {
                System.out.println("Erreur: fichier " +
                                   "syrine.p12" +
                                   " n'est pas un fichier pkcs#12 valide ou passphrase incorrect");
                return null ;
            }
         }
      public char[] getPassword(){
             return password;
             }
}

key 和认证加载

package tn.ance.signature;
    import java.security.KeyStore;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.cert.X509Certificate;
    import java.util.Enumeration;
    import java.util.Vector;
    public class recuperation_cles_cert {
        private X509Certificate cert = null;
        private PrivateKey privatekey = null;
        private PublicKey publickey = null;
        private KeyStore ks;
        private char[] password;

    public PrivateKey getPrivatekey(){

        chargement_fichier cf = new chargement_fichier(); 
        ks = cf.charger_fichier();
        password = cf.getPassword();

        try {
            Enumeration en = ks.aliases();
            String ALIAS = "";
            Vector vectaliases = new Vector();
            while (en.hasMoreElements())
                vectaliases.add(en.nextElement());
            String[] aliases = (String []) (vectaliases.toArray(new String[0]));
            for (int i = 0; i < aliases.length; i++)
                if (ks.isKeyEntry(aliases[i]))
                {
                    ALIAS = aliases[i];
                    break;
                }

            privatekey = (PrivateKey)ks.getKey(ALIAS, password);
            return privatekey;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        }



    public PublicKey getPublickey(){

        chargement_fichier cf = new chargement_fichier(); 
        ks = cf.charger_fichier();
        password = cf.getPassword();

        try {
            Enumeration en = ks.aliases();
            String ALIAS = "";
            Vector vectaliases = new Vector();
            while (en.hasMoreElements())
                vectaliases.add(en.nextElement());
            String[] aliases = (String []) (vectaliases.toArray(new String[0]));
            for (int i = 0; i < aliases.length; i++)
                if (ks.isKeyEntry(aliases[i]))
                {
                    ALIAS = aliases[i];
                    break;
                }

            publickey = ks.getCertificate(ALIAS).getPublicKey();
            return publickey;
        } catch (Exception e) {
            e.printStackTrace();
            return null ;
        }
         }

    public X509Certificate getCert(){

        chargement_fichier cf = new chargement_fichier(); 
        ks = cf.charger_fichier();
        password = cf.getPassword();

        try {
            Enumeration en = ks.aliases();
            String ALIAS = "";
            Vector vectaliases = new Vector();
            while (en.hasMoreElements())
                vectaliases.add(en.nextElement());
            String[] aliases = (String []) (vectaliases.toArray(new String[0]));
            for (int i = 0; i < aliases.length; i++)
                if (ks.isKeyEntry(aliases[i]))
                {
                    ALIAS = aliases[i];
                    break;
                }
            cert = (X509Certificate)ks.getCertificate(ALIAS);
            return cert;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        }

}

**

这里是错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers
    at org.bouncycastle.jcajce.provider.digest.GOST3411$Mappings.configure(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.setup(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.<init>(Unknown Source)
    at tn.ance.signature.chargement_fichier.charger_fichier(chargement_fichier.java:16)
    at tn.ance.signature.main_project.main(main_project.java:13)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.

loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 9 more

**

更新 我将 bcprov-jdk16-1.45 添加到文件夹 C:\Program Files\Java\jdk1.7.0_75\lib 并将其添加到项目中的外部 jar 路径,但现在出现此错误

Exception in thread "main" java.lang.NoSuchFieldError: gostR3411
    at org.bouncycastle.jcajce.provider.digest.GOST3411$Mappings.configure(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.setup(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(Unknown Source)
    at org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.bouncycastle.jce.provider.BouncyCastleProvider.<init>(Unknown Source)
at tn.ance.signature.chargement_fichier.charger_fichier(chargement_fichier.java:15)
at tn.ance.signature.main_project.main(main_project.java:13)

最佳答案

尝试使用 jdk15on-152 - 1.45 版本已停产。名称中带有 jdk15on 的 jar 版本适用于 JDK 1.5 到 JDK 1.8(我们最初尝试使用 jdk15+,但结果 maven 无法处理 +)。

关于java - 编译错误bouncycaSTLe java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31651409/

相关文章:

bouncycaSTLe - 如何使用 Bouncy CaSTLe 库从 PGPPublicKey 获取签名列表?

java - 如何比较 java.security.cert.X509Certificate 的不同实现

java - Android java.lang.IllegalArgumentException : Duplicate key in ArrayMap: null

java - 使用 Java 7 在 OSX 中创建文件的时间

java - 从两个大整数创建 ASN.1

java - 部署到 WildFly 时出现 BouncyCaSTLe ClassNotFoundException

java - 从Java中读取一个txt文件

java - jdialog 输入和转义不起作用

java - 通过 ObjectStreams 发送的对象不保留其字段值?

algorithm - BouncyCaSTLe 和算法错误