1. 使用BC库1.59版本已经可以支持国密算法SM2/SM3/SM4,某大神写的详细测试例子:https://github.com/ZZMarquis/gmhelper

2. 制作证书参考网上资料简单例子;

``` 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生成的证书比对缺少“公钥参数”对象,因为BC库公钥是采用X9.62格式,见rfc5349 https://tools.ietf.org/html/rfc5349 ; 如果一定要带公钥参数对象,代码去处理下ASN.1,把BcX509v3CertificateBuilder修改为X509v3CertificateBuilder,公钥通过createSubjectECPublicKeyInfo做下转换

``` 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. 自己如何构造公钥参数ECPublicKeyParameters参考:http://linuxgao.iteye.com/blog/2389904  如果要构造私钥参数类似如此操作,更简单,因为私钥参数ECPrivateKeyParameters只有一个大数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

java sm_Java国密SM2/SM3/SM4及证书相关推荐

  1. 国密SM2,SM3,SM4的前后台(js和java)加解密写法

    目录 SM2加解密 js java SM3加密 js java sm3前后台(js/java)加密不一致原因 SM4加解密 js java 之前做一个项目的时候需要用到国密SM2,SM3,SM4的加解 ...

  2. php gmssl,支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱GmSSL

    GmSSL概述 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码 ...

  3. OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法

    OpenSSL项目最近6个月添加了许多新特性, 包括对中国SM2/SM3/SM4算法的支持: SM2椭圆曲线: https://github.com/openssl/openssl/pull/4793 ...

  4. 国密 sm2,sm3,sm4 算法纯 JavaScript 实现

    2014 年国务院办公厅就颁发了<国务院办公厅转发密码局等部门关于金融领域密码应用指导意见>,指出在我国涉及到金融领域信息安全的产品和系统要自主可控,在金融领域使用国产加密标准是机构走向合 ...

  5. java sm9_一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱

    The GmSSL Project 网址:http://gmssl.org/docs/quickstart.html 在网上闲逛时发现一个工具.SSL支持国密算法.看着比较高大上.还没有用呢.记下来. ...

  6. 通过网页查看服务器算法,服务器使用国密(SM2/SM3/SM4)证书,通过浏览器访问

    1. Apache + Gmssl Apache 本身不支持国密,需要修改代码支持GMTLS 下载解压: wget http://archive.apache.org/dist/httpd/httpd ...

  7. 服务器使用国密(SM2/SM3/SM4)证书,通过浏览器访问

    1. Apache + Gmssl Apache 本身不支持国密,需要修改代码支持GMTLS 下载解压: wget http://archive.apache.org/dist/httpd/httpd ...

  8. PB实现国密SM2/SM3/SM4算法(DLL方式)

    文章目录 SM4 SM4简介 分组加密模式ECB与CBC ECB模式加密解密 CBC模式加密解密 SM3 SM3简介 SM3摘要生成 SM3WithSM2摘要生成 SM2 SM2简介 SM2签名与验签 ...

  9. Java实现基于国密SM2、SM4生成证书密钥进行字串的加解密

    目录 流程说明: DTO层 生成证书密钥所需参数封装类 最终密文封装类 controller层 service层 serviceImp层 加密工具类 测试 发送生成证书请求 发送生成密文请求 发送解读 ...

最新文章

  1. 树上问题 ---- E. Fib-tree(斐波那契数的性质 + 暴力模拟 + 认真计算复杂度)
  2. MMDetection V2.0:更快更强的通用目标检测平台
  3. ​iOS 9音频应用播放音频之第一个ios9音频实例2
  4. c语言利用文件体写在桌面上,在C语言中怎样新建一个文件夹?
  5. vue----sourceMap
  6. python程序间通信_python进程间通信Queue工作过程详解
  7. CUDA学习(二十九)
  8. linux 下tftp服务器搭建,CentOS 6下搭建TFTP服务器
  9. AI人工智能技术还原康乾盛世三代皇帝样貌,太帅了!
  10. 阿里云域名部署免费证书,开启https访问。
  11. 低功耗蓝牙开发权威指南--第三部分 主机 (第9-12章)
  12. 基于stm32的智能语音提醒器
  13. 台达PLC与单片机的通讯
  14. mybatisPlus中getOne方法如何只取其中一条数据(Wrapper有多条数据时)
  15. 用python制作简单的二维码生成器
  16. 阿里云云服务器使用须知(全套详解)
  17. 小白建网站,该如何入手?
  18. iPhone模拟定位(非越狱修改手机定位)
  19. 项目管理中的进度与成本控制
  20. Java JDK (SE)安装详细教程

热门文章

  1. macbook怎么运行exe文件 mac打开exe文件的三大方法
  2. 莫罕达斯·甘地 - 论非暴力
  3. 从圣雄甘地名言 看安腾开放架构
  4. html本地存储方式实现的五线谱在线识谱练习应用
  5. 前端三件套简介(HTML\CSS\JS)
  6. ole db 连接mysql_数据库连接技术之OLE DB
  7. 第三代计算机网络的优缺点,三代手持式随身WIFI优缺点
  8. java基于Map实现DFA算法
  9. STM8S0 TIM1_PWM互补输出
  10. js通用对象数组冒牌排序