网站首页 > 技术文章 正文
前言
周末了,又可以愉快的敲一下自己的代码了,最近入职了一个小坑公司,不让带自己的电脑,一言难尽呀呀呀,哈哈回归正题。今天讲讲前后端分离当中,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 前端上传文件或者上传文件夹
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 567℃几个Oracle空值处理函数 oracle处理null值的函数
- 566℃Oracle分析函数之Lag和Lead()使用
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 544℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 519℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)