国密算法是国家密码局制定标准的一系列算法,包括SM1、SM2、SM3、SM4等。其中,SM1是采用硬件实现的,不予讨论;SM2是非对称加密算法;SM3是摘要算法;SM4是对称加密算法。本系列文章将讲解SM2、SM3、SM4 Java版本实现,所有的代码实现都是基于BC库来做的,本篇将讲解如何生成SM2密钥对。

BC库是实现加解密算法的基础库,我们首先要在代码里引入BC库,如下:

org.bouncycastle

bcprov-jdk15on

1.59

SM2是非对称加密,密钥是由公钥和私钥组成的密钥对。在使用SM2算法进行加解密前,必须要先生成密钥对。代码如下:

/*** SM2算法生成密钥对* @return 密钥对信息*/

public static KeyPair generateSm2KeyPair() {

try {

final ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");

// 获取一个椭圆曲线类型的密钥对生成器

final KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());

SecureRandom random = new SecureRandom();

// 使用SM2的算法区域初始化密钥生成器

kpg.initialize(sm2Spec, random);

// 获取密钥对

KeyPair keyPair = kpg.generateKeyPair();

return keyPair;

} catch (Exception e) {

LOGGER.error("generate sm2 key pair failed:{}", e.getMessage(), e);

throw new BusinessException("生成密钥对失败");

}

}

代码依赖对象都是BC库和java security库里的,只有BusinessException是自己定义的业务异常,可自行定义即可。测试代码如下:

@Test

public void generateSm2KeyPairTest() {

KeyPair keyPair = SecretKeyUtils.generateSm2KeyPair();

System.out.println(Base64Utils.encode(keyPair.getPrivate().getEncoded()));

System.out.println(Base64Utils.encode(keyPair.getPublic().getEncoded()));

}

Base64Utils是我自己写的Base64工具类,实现方式有很多,自己在网上找下即可,也可转成Hex输出。执行测试代码,得到Base64之后的密钥对如下:

MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgVGXZII9dj8Ou8FzrnvXOletkk1oNrJ5JLxkQu8IVl0mgCgYIKoEcz1UBgi2hRANCAARfJ7o8rj0aOe9reb8Ink8gzNmVrIypxs1Upt8XSWWVW/ighjvKWD1D4HMq14uwuBMNJq/mldwcx0+wvW1sOpes

MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXye6PK49Gjnva3m/CJ5PIMzZlayMqcbNVKbfF0lllVv4oIY7ylg9Q+BzKteLsLgTDSav5pXcHMdPsL1tbDqXrA==

java代码生成密钥库_【Java加解密系列】- SM2生成密钥相关推荐

  1. 【Java加解密系列】- SM2生成密钥

    国密算法是国家密码局制定标准的一系列算法,包括SM1.SM2.SM3.SM4等.其中,SM1是采用硬件实现的,不予讨论:SM2是非对称加密算法:SM3是摘要算法:SM4是对称加密算法.本系列博客将讲解 ...

  2. 【Java加解密系列】- SM2加解密

    上一篇博客介绍了SM2算法生成密钥的过程,详见-SM2生成密钥.这篇博客接着介绍SM2算法如何用上篇博客生成的密钥进行加解密操作. 因为密钥都是byte数组,在进行加解密前,我们需要将密钥转换成BC库 ...

  3. RSA非对称加密和解密(同时生成密钥)

    RSA非对称加密和解密(同时生成密钥) 准备jar包 bcprov-jdk16-1.46.jar commons-codec-1.15.jar 获取jar地址:https://mvnrepositor ...

  4. iOS 使用 SM2 SM4 加解密,SM2 签名验签及 SM3 签名

    前言 对于开发人员,开发中加解密是经常用到的,常见的密码算法 MD5.SHA.AES.DES,RSA 等等,这些无一例外都是国外的加密算法.基于安全和宏观战略考虑,我国从 2010 年先后推出了 SM ...

  5. java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...

    目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...

  6. java aes ebc_Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)

    [实例简介] 实现了AES/ECB/PKCS5Padding.AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充.是标准的AES算法,支持在线AES加解密网站互 ...

  7. java aes ctr_AES CBC和CTR加解密实例

    http://www.metsky.com/archives/585.html 2012 AES(Advanced Encryption Standard,高级加密标准) 又叫Rijndael加密法, ...

  8. JAVA建行银企直连报文加解密

    接上一篇密钥交换之后获得银行提供的:银行RSA签名公钥RSA.bank.public.key,接受报文验签使用:银行DES加密私钥DES.bank.private.key,加密报文使用.还有之前自己生 ...

  9. Java使用PBE算法进行对称加解密最简入门和示例

    PBE 算法 PBE( Password Based Encryption, 基于口密加密).PBE是一种基于口令的加密算法, 采用随机数杂凑(盐)多重加密方法保证数据安全性. PBE算法并没有真正构 ...

最新文章

  1. Linux定时器使用
  2. 公司新来了个大神,一次分享他的 9 大技能
  3. 鸟哥的Linux私房菜(服务器)- 第五章、 Linux 常用网络指令
  4. lambda 函数与 Generator 函数
  5. php实现附件上传下载,PHP实现文件上传与下载
  6. 机械硬盘旋转时间_高端PC真的没有机械盘了么?
  7. FZU_2019_Mountain Number题解
  8. jquery中常见的标题内容之间的切换
  9. t-SNE高维数据可视化(python)
  10. [ios] - TommyBros(山寨马里奥) – 开源游戏
  11. 家庭宽带光猫改桥接模式教程-淇云博客
  12. python能做什么工作知乎-python能做什么知乎
  13. PulseAudio安装流程
  14. 因果图测试用例设计方法
  15. 程序员写代码时你戴耳机是为了撩妹儿吗?感觉有点酷!
  16. 利用CouchDB未授权访问漏洞执行任意系统命令
  17. 计算机网络课后习题概略
  18. 2021/7/15——集训Day.10
  19. canvas图片合成
  20. 软件工程作业7.8.9

热门文章

  1. HBuilderX下载安装:国产前端开发工具 (赞)
  2. [经济学原理|微观部分]生产要素价格和收入分配
  3. 【机器学习中的数学】函数空间
  4. 会利用信息差赚钱的人才是聪明人
  5. 《Python 3网络爬虫开发实战 》崔庆才著 第二章笔记
  6. html5 图形水平运动,搞明白这几张图,物理经典模型动图演示
  7. 苹果电脑上不错的几个矢量图形编辑工具
  8. Java poi之word文本替换
  9. Android百度地图(二)结合方向传感器我们自己定位哪里走
  10. 我们的团队是一群攻城狮