• 大小: 974KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2022-08-27
  • 语言: Java
  • 标签: Android  SM2  SM3  SM  

资源简介

Android SM2、SM3、SM4 算法支持 Service Provider 及证书制作软件包 国密算法 JCAJCE Service Provider,适应版本 Android 4.2.2~7.0 支持 SM2 的 KeyFactory、KeyPairGenerator、Cipher、Signature、X.509 CertificateFactory 接口 支持 SM3 的 MessageDigest 接口、SM3withSM2 混合算法 支持 SM4 的 Cipher、KeyFactory、KeyGenerator、SecretKey 接口、相关算法 CMAC-SM4、Poly1305-SM4 增加 java.security.PublicKey 的子类 SM2PublicKey 增加 java.security.PrivateKey 的子类 SM2PrivateKey 全功能支持 SM3withSM2 算法的 X.509 证书结构体解释与密码运算 支持 BKS、PKCS#12 KeyStore 生成、解释、验算 X.509v1/v3 证书,签名算法支持 SM3withSM2、主流 RSA、DSA、ECDSA.... 生成、解释、验算 PKCS#10 证书申请,签名算法支持 SM3withSM2、主流 RSA、DSA、ECDSA.... *** 无须打包 BouncyCastle 支持库,体积小、节约内存 *** 请参阅 testSM.java、testCERT.java 文件列表: 1、AndroidSM.jar -- SM2、SM3、SM4 算法/证书支持的 JCA/JCE Service Provider 类库 2、AndroidCRT.jar -- X.509 数字证书/PKCS#10 证书申请相关类库 3、bc422.jar -- BouncyCastle 加密库,Android 4.2.2 内置版本(由真机导出dex文件转换而得,仅用于编译时选用,勿打包到apk文件中) 4、testSM.java -- SM2、SM3、SM4 算法相关类引用范例 5、testCERT.java -- X.509 数字证书/PKCS#10 证书申请相关类引用范例 6、readme.txt -- 本文 因条件及精力限制,各类、方法的实现未经严格彻底的测试,不宜用于商业用途软件的开发。 如欲将本开发包发布、上传、拷贝、共享等,务必保持其内容完整性(包括本文) 如有需要帮助或者索取源码,请联系 suntongo@qq.com, suntongo@hotmail.com

资源截图

代码片段和文件信息

package org.suntongo.cert;

import android.util.base64;

import com.android.org.bouncycastle.asn1.x509.KeyPurposeId;

import org.bouncycastle.asn1.x509.BasicConstraints;
import org.bouncycastle.asn1.x509.ExtendedKeyUsage;
import org.bouncycastle.asn1.x509.Extension;
import org.bouncycastle.asn1.x509.KeyUsage;
import org.bouncycastle.cert.CertException;
import org.bouncycastle.cert.CertIOException;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.operator.ContentSigner;
import org.bouncycastle.operator.ContentSignerBuilder;
import org.bouncycastle.operator.ContentVerifierProvider;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.operator.X509CertificateConverter;
import org.bouncycastle.pkcs10.PKCS10CertificationRequest;
import org.bouncycastle.pkcs10.PKCSException;
import org.suntongo.cert.NameBuilder.RDN;
import org.suntongo.gm.provider.SMProvider;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Date;

import javax.security.auth.x500.X500Principal;

/**
 * testCERT
 */
public class testCERT {

    public static void addProvider() {
        Provider prvdr = Security.getProvider(“SM“);
        if (prvdr == null) {
            prvdr = new SMProvider();
            Security.addProvider(prvdr);
        }
    }

    private static KeyPair genSM2KeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator kpg;
        try { kpg = KeyPairGenerator.getInstance(“SM2“);}
        catch (NoSuchAlgorithmException e) {
            addProvider();
            kpg = KeyPairGenerator.getInstance(“SM2“);
        }
        /* You can also initialize the generator with a random source if needed. */
        //kpg.initialize(256 new SecureRandom());
        return kpg.generateKeyPair();
    }

    public static String testCRT1() throws NoSuchAlgorithmException
            OperatorCreationException CertificateException CertException {
        StringBuilder sb = new StringBuilder();
        SecureRandom apRandom = new SecureRandom();
        NameBuilder nb = new NameBuilder(RDN.INSTANCE);
        nb.addRDN(RDN.CN “Suntongo“);
        nb.addRDN(RDN.E “suntongo@qq.com“);

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA“);
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        X500Principal me = nb.toName();
        B

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       91063  2016-08-13 11:57  AndroidCRT.jar
     文件      108993  2016-08-13 11:59  AndroidSM.jar
     文件     1007256  2016-07-16 06:25  bc422.jar
     文件        1508  2016-08-13 12:03  readme.txt
     文件        9041  2016-08-13 11:41  testCERT.java
     文件        9845  2016-08-13 11:42  testSM.java

评论

共有 条评论