資源簡介
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
- 上一篇:java j2ee 課程設計報告
- 下一篇:文件管理器 Android文件管理器
評論
共有 條評論