Java國密SM2/SM3/SM4及證書

1. 使用BC庫1.59版本已經(jīng)可以支持國密算法SM2/SM3/SM4,某大神寫的詳細(xì)測試?yán)樱篽ttps://github.com/ZZMarquis/gmhelper

2.?制作證書參考網(wǎng)上資料簡單例子;

``` java

public static void genSM2CertBySelf() throws OperatorCreationException, IOException, CertificateException {

String dn = "CN=dfg, OU=aert, O=45y, L=sdfg, ST=fg, C=CN";

long year = 360 * 24 * 60 * 60 * 1000;

Date notBefore = new Date();

Date notAfter = new Date(notBefore.getTime() + year);

//證書的名稱

? ? ? ? String fileName = "self"+new Date().getTime()/1000;

String path? = "/test/gmhelper/";

String rootCertPath = path+fileName+".der";

AsymmetricCipherKeyPair kp = Sm2Util.generateKeyPair();

ECPrivateKeyParameters bcecPrivateKey = (ECPrivateKeyParameters)kp.getPrivate();

ECPublicKeyParameters bcecPublicKey = (ECPublicKeyParameters)kp.getPublic();

BcX509v3CertificateBuilder build = new BcX509v3CertificateBuilder(

new X500Name(dn),

BigInteger.probablePrime(64, new Random()),

notBefore,

notAfter,

new X500Name(dn),

bcecPublicKey);

AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SM3withSM2");//即"1.2.156.10197.1.501"

? ? ? ? AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find("SHA256");

ContentSigner sigGen = new BcECContentSignerBuilder(sigAlgId, digAlgId).build(bcecPrivateKey);

X509CertificateHolder x509certHolder = build.build(sigGen);

FileOutputStream outputStream = new FileOutputStream(rootCertPath);

outputStream.write(x509certHolder.getEncoded());

outputStream.close();

}

```

3. 使用上面介紹的制作證書方法如果跟GMSSL生成的證書比對缺少“公鑰參數(shù)”對象,因為BC庫公鑰是采用X9.62格式,見rfc5349?https://tools.ietf.org/html/rfc5349 ; 如果一定要帶公鑰參數(shù)對象,代碼去處理下ASN.1,把BcX509v3CertificateBuilder修改為X509v3CertificateBuilder,公鑰通過createSubjectECPublicKeyInfo做下轉(zhuǎn)換

``` java

public static SubjectPublicKeyInfo createSubjectECPublicKeyInfo(ECPublicKeyParameters pub)

{

? ? ASN1OctetString p = (ASN1OctetString)new X9ECPoint(pub.getQ()).toASN1Primitive();

? ? return new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, GMObjectIdentifiers.sm2p256v1), p.getOctets());

}

```

4. 自己如何構(gòu)造公鑰參數(shù)ECPublicKeyParameters參考:http://linuxgao.iteye.com/blog/2389904 ?如果要構(gòu)造私鑰參數(shù)類似如此操作,更簡單,因為私鑰參數(shù)ECPrivateKeyParameters只有一個大數(shù)BigInteger

5.?證書解析參考:https://blog.csdn.net/qq_32221419/article/details/59111828

6、證書請求及其它:參考?http://www.sitcoder.com/?post=54 和

https://blog.csdn.net/jinhill/article/details/17612273

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在光陰的無情中,給愛情以撫慰。 人可以濫情至此,也可以專情至此。艱難困苦中的愛情是那么堅定與純粹,一輩子換來的只是...
    染唯塵arowlamb閱讀 367評論 0 0
  • 2011年3月10日 發(fā)燒,39.3度。 身體在燃燒,人卻感覺很冷,只想鉆在厚厚的被子里。 原來肌肉和關(guān)節(jié)可以這樣...
    高小花0218閱讀 382評論 0 0
  • 有人陰差陽錯,有人機緣巧合。 二娃四歲那年,元芬又生了一個兒子,排行老三。老三是農(nóng)歷五月出生的,正是青黃不接的時節(jié)...
    話嘮的二娃閱讀 551評論 0 0
  • 開心, 今天外婆和媽媽都來接你放學(xué),原因是媽媽把外婆旅游的日期搞錯了,最近類似事件搞錯好多次啦,自省自省。 不過兩...
    蔡敏_Michelle閱讀 267評論 0 2

友情鏈接更多精彩內(nèi)容