国密传输加密与签名演示DEMO
AI-摘要
GPT-4.0-turbo GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
国密传输加密与签名演示DEMO
Takake具体实现细节链接地址:
项目仓库链接地址
项目演示链接地址
- LOGIN-DEMO
- 默认用户名密码:admin,admin123
1.项目简介
1.1.密钥交换和用户认证
- 前端请求后端获取SM2公钥
- 前端随机生成SM4密钥(key+iv)
- 用户认证(用户输入用户名和密码)
- 前端分别使用SM2公钥加密(用户密码、key、iv)
- 后端使用SM2私钥解密获得(用户密码、key、iv)
- 用户认证成功将key、iv存入loginUser然后存入redis
- 生成JWT,请勿将key、iv存入JWT (JWT只能保证数据完整性)
- 返回前端存入sessionStorage (完成用户认证和密钥交互)
- 使用sm4密钥加密业务数据进行传输
1.2.敏感数据加密传输
- 前端从sessionStorage中获取sm4密钥和iv
- 加密敏感数据发送至后端
- 后端使用从JWT中获取到redisKey获取该登陆会话的loginUser,并从loginUser中获取到登陆时存入的sm4密钥和iv
- 使用该sm4密钥解密前端传来的加密数据
- 使用该密钥加密需要响应的敏感数据
- 前端获取到响应中sm4加密后的密文,使用sessionStorage中的密钥和iv进行解密
1.3.传输签名校验
前端密钥交换成功的前提是需要保证传输过程中数据不被篡改,因此需要使用到签名校验
- 通过axios请求拦截器,拦截到需要签名的请求
- 判断get还是post请求,以及请求体类型
- 拼接参数SM3(SALT$+URI+拼接的请求参数+$Timpstamp)
- 将Sign和Timestamp放入请求头
- 签名过滤器判断是否存在签名与时间戳
- 拼接前端传来的请求参数
- 签名生成enSign与前端Sign做对比,相同签名校验通过,不同签名校验失败
1.4.数据库用户密码加密
数据库用户密码也需要使用国密算法进行加密存储,数据库加密通常使用单向hash加密算法
添加自定义密码加密盐
对用户密码进行三次加盐的sm3加密
1.5.配置文件加密
- 使用jasypt对application配置密钥及密码数据进行加密
- 实现PBEStringEncryptor接口使用自定义SM4加密算法进行加密
- 将配置文件解密密钥存入环境变量
2.项目关于
2.1.项目启动
- 安装依赖
npm install
- 项目启动
npm run serve
- 启动redis,(默认为空密码,请在生产环境中设置密码)
- 启动mysql,(默认为若口令密码123456,请在生产环境中设置强密码)
- 启动后端服务
- 默认登陆用户名密码 admin,admin123
2.2.需要一些简单的基础知识
2.3.生产环境中的一些注意事项和提示
- 请勿在代码中硬编码密钥和密码
- 请勿在配置文件中明文存储密钥和密码
- 该项目均使用国密算法实现
- 该项目编码者本身并非专业开发,项目可能存在诸多BUG,欢迎提issue,或者联系本人。
注:本项目为个人项目,仅提供演示作用,且不为任何企业或组织的编码规范
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果