java代码生成密钥库_【Java加解密系列】- SM2生成密钥
国密算法是国家密码局制定标准的一系列算法,包括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生成密钥相关推荐
- 【Java加解密系列】- SM2生成密钥
国密算法是国家密码局制定标准的一系列算法,包括SM1.SM2.SM3.SM4等.其中,SM1是采用硬件实现的,不予讨论:SM2是非对称加密算法:SM3是摘要算法:SM4是对称加密算法.本系列博客将讲解 ...
- 【Java加解密系列】- SM2加解密
上一篇博客介绍了SM2算法生成密钥的过程,详见-SM2生成密钥.这篇博客接着介绍SM2算法如何用上篇博客生成的密钥进行加解密操作. 因为密钥都是byte数组,在进行加解密前,我们需要将密钥转换成BC库 ...
- RSA非对称加密和解密(同时生成密钥)
RSA非对称加密和解密(同时生成密钥) 准备jar包 bcprov-jdk16-1.46.jar commons-codec-1.15.jar 获取jar地址:https://mvnrepositor ...
- iOS 使用 SM2 SM4 加解密,SM2 签名验签及 SM3 签名
前言 对于开发人员,开发中加解密是经常用到的,常见的密码算法 MD5.SHA.AES.DES,RSA 等等,这些无一例外都是国外的加密算法.基于安全和宏观战略考虑,我国从 2010 年先后推出了 SM ...
- java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...
目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...
- java aes ebc_Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)
[实例简介] 实现了AES/ECB/PKCS5Padding.AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充.是标准的AES算法,支持在线AES加解密网站互 ...
- java aes ctr_AES CBC和CTR加解密实例
http://www.metsky.com/archives/585.html 2012 AES(Advanced Encryption Standard,高级加密标准) 又叫Rijndael加密法, ...
- JAVA建行银企直连报文加解密
接上一篇密钥交换之后获得银行提供的:银行RSA签名公钥RSA.bank.public.key,接受报文验签使用:银行DES加密私钥DES.bank.private.key,加密报文使用.还有之前自己生 ...
- Java使用PBE算法进行对称加解密最简入门和示例
PBE 算法 PBE( Password Based Encryption, 基于口密加密).PBE是一种基于口令的加密算法, 采用随机数杂凑(盐)多重加密方法保证数据安全性. PBE算法并没有真正构 ...
最新文章
- Linux定时器使用
- 公司新来了个大神,一次分享他的 9 大技能
- 鸟哥的Linux私房菜(服务器)- 第五章、 Linux 常用网络指令
- lambda 函数与 Generator 函数
- php实现附件上传下载,PHP实现文件上传与下载
- 机械硬盘旋转时间_高端PC真的没有机械盘了么?
- FZU_2019_Mountain Number题解
- jquery中常见的标题内容之间的切换
- t-SNE高维数据可视化(python)
- [ios] - TommyBros(山寨马里奥) – 开源游戏
- 家庭宽带光猫改桥接模式教程-淇云博客
- python能做什么工作知乎-python能做什么知乎
- PulseAudio安装流程
- 因果图测试用例设计方法
- 程序员写代码时你戴耳机是为了撩妹儿吗?感觉有点酷!
- 利用CouchDB未授权访问漏洞执行任意系统命令
- 计算机网络课后习题概略
- 2021/7/15——集训Day.10
- canvas图片合成
- 软件工程作业7.8.9