1.SM2生成公钥和私钥两对,前端和后端分别拥有自己的私钥和对方的公钥;
2.前端使用后端提供的公钥进行SM2加密,发起请求,并且使用aes生成请求帧->盐值秘钥(sk->salt),sk放入请求头,salt放入SM加密内容,待后端返回数据后销毁存储在浏览器的请求帧->盐值秘钥(每次请求每次生成和销毁);
3.前端使用SM.js对加密签名生成签名证书sign,放到请求头,sign证书规则如下
签名证书:sign=Sm2Util.sign(privateKey,MD5(resDeStr+yyyyMMddHHmmssSSS+6位随机数))
密文:resDeStr=明文+yyyyMMddHHmmssSSS+6位随机数
签名证书内容:MD5(resDeStr(密文)+yyyyMMddHHmmssSSS+6位随机数)
4.后端拿到密文后使用私钥进行解密,得到明文+salt+(yyyyMMddHHmmssSSS+6位随机数),使用MD5(密文++yyyyMMddHHmmssSSS+6位随机数)进行签名得到签名内容,再使用前端的公钥进行验签,验签通过则放过往下流程,否则提示验签不通过;
5.后端获取到sk->salt,可缓存存储起来,业务流程结束后,使用前端传输过来的盐值秘钥(sk->salt),进行AES加密,返回加密内容给前端(加密内容及签名参考前端请求流程);
6.前端使用salt进行解密,验签,渲染内容,流程结束;
以下两种方式二选一(推荐成熟的2)
1.自定义方法,需添加依赖
<!--SM国密加解密工具类依赖-->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-crypto</artifactId>
<version>${hutool.version}</version>
</dependency>
2.直接使用github的成熟jar包
地址:https://github.com/antherd/sm-crypto
<dependency>
<groupId>com.antherd</groupId>
<artifactId>sm-crypto</artifactId>
<version>0.3.2</version>
</dependency>
Keypair keypair = Sm2.generateKeyPairHex();
String privateKey = keypair.getPrivateKey(); // 公钥
String publicKey = keypair.getPublicKey(); // 私钥
// cipherMode 1 - C1C3C2,0 - C1C2C3,默认为1
String encryptData = Sm2.doEncrypt(msg, publicKey); // 加密结果
String decryptData = Sm2.doDecrypt(encryptData, privateKey); // 解密结果
国密SM2+RSA+AES+MD5加解密,验签流程,工具示例,增强版完善版(包含前后端加解密验签流程)
需积分: 5 200 浏览量
2024-04-11
19:18:47
上传
评论
收藏 89KB ZIP 举报
沫离痕
- 粉丝: 42
- 资源: 17
最新资源
- Qt开发知识、经验总结 包括Qss,数据库,Excel,Model/View等
- IV数据.xlsx
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
- 手机端 我的世界融合植物大战僵尸版.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈