网站首页 > 技术文章 正文
前言
周末了,又可以愉快的敲一下自己的代码了,最近入职了一个小坑公司,不让带自己的电脑,一言难尽呀呀呀,哈哈回归正题。今天讲讲前后端分离当中,http请求报文的加解密。现在大公司都要求国密加密了,全报文加密的那种。一切为了安全嘛,还是很有必要的,单靠https证书还是不太靠谱。下面先讲加密流程。
流程
客户端-->服务端-->客户端
客户端:
1:生成随机SM4秘钥
2:使用SM2算法对SM4秘钥进行公钥加密,得到SM4秘钥密文
3:使用SM4秘钥对报文明文进行SM4加密,得到报文加密数据
4:将二个数据分别放到两个字段当中(姑且作为A,B字段)。
服务端
5:使用SM2算法先对SM4秘钥密文进行私钥解密。得到SM4秘钥原文
6:使用SM4秘钥对SM4报文密文进行解密,得到明文。
7:返回数据:使用SM4秘钥对返回报文进行SM4加密。密文放入一个字段当中(C)
客户端
8:使用SM4秘钥对返回报文进行解密,得到返回明文。
整个加密流程比较复杂,还有点影响性能。
代码
我的脚手架是基于springCloud框架,有一个统一的入口网关,那么我们就可以在网关进行报文的加密解密。我就只贴加解密的代码了。这里我用了hutool工具。
SM2加密:
SM2 sm2 = new SM2("SM2私钥", "SM2公钥");
//得到SM4秘钥密文
String sm4KeyCiphertext = sm2.encryptHex("SM4秘钥", KeyType.PublicKey);
SM2解密
SM2 sm2 = new SM2("SM2私钥", "SM2公钥");
//得到SM4秘钥明文
String sm4Key = StrUtil.utf8Str(sm2.decryptFromBcd("SM4秘钥密文", KeyType.PrivateKey));
SM4加密
SymmetricCrypto sm4 = SmUtil.sm4("SM4秘钥".getBytes());
//得到报文密文
String requestData = sm4.encryptHex("明文");
SM4解密
SymmetricCrypto sm4 = SmUtil.sm4("SM4秘钥".getBytes());
//得到报文明文
String requestData = sm4Result.decryptStr("SM4加密报文");
问题
springCloudGateway在某些异常的时候拿不到参数的值,像sentinel限流这里就没有。很奇怪,按理说是能拿到的,不纠结这个,如果遇到这种问题就获取不到SM4加密秘钥,就无法对返回参数进行加密处理。我用了一个不太成熟的方法,多返回一个参数D,这个用来标识返回的数据不是走的SM4加密,走SM2直接加密返回,前端用SM2另一套加密的私钥进行解密(这里一定不能用SM4秘钥加密的SM2公私钥)。
还有一个问题,就是上面说到的网关异常处理,大家一定要记得异常的时候也要对返回异常报文进行加密。否则你的网关在报错的时候前端就无法获取到正确的报错信息。
今天就就到这里了,想想又快要上班了,太难了。
猜你喜欢
- 2025-05-08 前端存储革命:IndexedDB 从入门到实战
- 2025-05-08 交易所安全测试(七)丨用户认证(交易所操作)
- 2025-05-08 Go进阶AES对称 Crypto-JS 加密和Go解密
- 2025-05-08 【开源】强烈推荐,国内首个开源国密前后端分离快速开发平台
- 2025-05-08 终于知道公钥、私钥、对称、非对称加密是什么了
- 2025-05-08 如何设计一套二次验证机制来防止非真实用户在12306刷票?
- 2025-05-08 前端安全-漏洞攻防指南(前端攻击以及防御方法)
- 2024-09-17 如何优雅的实现 Spring Boot 接口参数加密解密?
- 2024-09-17 浅析前端加密后数据包的修改方法
- 2024-09-17 前端上传文件或者上传文件夹
你 发表评论:
欢迎- 最近发表
-
- 前端流行框架Vue3教程:13. 组件传递数据_Props
- 前端必看!10 个 Vue3 救命技巧,解决你 90% 的开发难题?
- JAVA和JavaScript到底是什么关系?是亲戚吗?
- Java和js有什么区别?(java和javascript的区别和联系)
- 东方标准|Web和Java的区别,如何选择这两个专业
- 前端面试题-JS 中如何实现大对象深度对比
- 360前端一面~面试题解析(360前端笔试)
- 加班秃头别慌!1 道 Vue 面试题,快速解锁大厂 offer 通关密码
- 焦虑深夜刷题!5 道高频 React 面试题,吃透 offer 稳了
- 2025Web前端面试题大全(整理版)面试题附答案详解,最全面详细
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)