PEM格式国密数字证书和SM2私钥导入大宝CA的DCKS文件的方法

系统要求
1. Windows系统、Linux系统、Mac系统
2. JDK7及以上
3. 调用大宝CA的JCE库
4. JDK使用无限制的安全策略文件

 

PEM证书和私钥导入DCKS文件的核心代码

    public String importCertAndPrivateKeyPEM(String sm2PublicKeyPEMFilepath, String sm2PrivateKeyPEMFilepath, char[] priKeyPassword, String alias)
    {
        InputStream bis1 = null;
        InputStream bis2 = null;
        X509Certificate cert = null;
        try
        {
            bis1 = new FileInputStream(new File(sm2PublicKeyPEMFilepath));
            CertificateFactory cf = CertificateFactory.getInstance("X509", DoubleCA.PROVIDER_NAME);
            cert = (X509Certificate)cf.generateCertificate(bis1);
            if (alias == null)
            {
                alias = DnComponents.stringToBCDNString(((X509Certificate)cert).getSubjectDN().getName());
            }
            PublicKey sm2PublicKey = cert.getPublicKey();
            
            bis2 = new FileInputStream(new File(sm2PrivateKeyPEMFilepath));
            int bufferLen = bis2.available();
            byte[] bufferTemp = new byte[bufferLen];
            bis2.read(bufferTemp);
            String strtemp = new String(bufferTemp);
            strtemp = strtemp.replaceAll("-----BEGIN PRIVATE KEY-----", "");
            strtemp = strtemp.replaceAll("-----END PRIVATE KEY-----", "");
            byte[] privateKeyBytes = Base64.decode(strtemp);
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);

            KeyFactory factory = KeyFactory.getInstance("SM2");
            PrivateKey sm2PrivateKey = factory.generatePrivate(pkcs8EncodedKeySpec);
            KeyPair keyPair = new KeyPair(sm2PublicKey, sm2PrivateKey);
            X509Certificate[] chain = new X509Certificate[1];
            chain[0] = cert;
            if (alias == null || alias.length() <= 0)
            {
                alias = DnComponents.stringToBCDNString(chain[0].getSubjectDN().getName());
            }
            keyStore.setKeyEntry(alias, keyPair.getPrivate(), priKeyPassword, chain);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            alias = null;
        }
        finally
        {
            try
            {
                bis1.close();
            }
            catch(Exception ex)
            {
            }
            try
            {
                bis2.close();
            }
            catch(Exception ex)
            {
            }
        }
        return alias;
    }

最新版本大宝CA国密JCE的JAR包和示例代码下载地址:https://download.csdn.net/download/upset_ming/11866671

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值