当前位置: 首页 > news >正文

前后端国密加密传输用户密码流程

一、国密算法介绍

SM2:非对称加密,由公钥和私钥组成,公钥可以公开,私钥不允许公开,公钥的加密结果只有私钥能够解开,公钥加密相同内容,每次加密结果不同。

SM3:哈希算法,相同的内容哈希算法结果相同。

SM4:对称加密,使用一个密钥对原文进行加密,对密文进行解密。

二、工作流程

服务端与客户端使用一对SM2密钥,建议SM2公钥通过调用服务端接口获取,不要硬编码在客户端。
这里用保存用户密码流程举例:

  1. 客户端请求服务端生成随机数,服务端保存该随机数

服务端随机数作为server_nonce,nonce是指一个仅使用一次的随机数或令牌,用于确保某次通信或交易的唯一性,防止恶意用户重复使用有效请求,比如攻击者拦截登陆请求,虽然无法解密请求内容,但是可以将请求信息重复发送,模拟用户登陆,如果请求中只包含用户密码而不包含server_nonce,会导致攻击者成功登陆的安全风险。

  1. 客户端生成客户端随机数,与服务端随机数按指定规则成SM4秘钥。

引入客户端随机数使最终的对称密钥由两端共同贡献(server_nonce + client_nonce),这样即使有人知道server_nonce,没有客户端随机数也无法推导出会话密钥,增加抗重放与密钥不可预测性。

  1. 客户端使用SM4秘钥加密原文,得到国密加密结果,SM4密钥由服务端随机数与客户端随机数生成,所以每次密钥不同,每次加密结果不同。
  2. 客户端使用SM2公钥加密客户端随机数。

使客户端随机数在传输中被保护,只有持有 SM2 私钥的服务器可以恢复 client_nonce。这样即便攻击者截获了客户端随机数密文,也无法得到 client_nonce,从而无法派生出 SM4 密钥解密密码密文。

  1. 客户端将SM4加密的密码与SM2加密的客户端随机数一起发送给服务端。

把加密后的密码与加密的客户端随机数组合发送,服务端能安全获得 client_nonce(解密 SM2),进而和已存 server_nonce 共同派生 SM4 密钥并解密密码。

  1. 服务端使用SM2私钥解密SM2公钥加密的客户端随机数,得到客户端随机数,与保存的服务端随机数共同生成SM4秘钥。
  2. 服务端使用SM4秘钥解密加密结果,得到原始密码。
  3. 服务端使用SM3对原始密码进行哈希运算,保存到数据库。

文章转载自:

http://BhAdkYfr.cLqpj.cn
http://7JeHXIqL.cLqpj.cn
http://JSYPB1AX.cLqpj.cn
http://SZ5hgcg2.cLqpj.cn
http://lPcVRJ5F.cLqpj.cn
http://KGI3pQyq.cLqpj.cn
http://uBySXEJJ.cLqpj.cn
http://MK0t6evV.cLqpj.cn
http://jpdocUVF.cLqpj.cn
http://UyAxIxPP.cLqpj.cn
http://sOz5xhH1.cLqpj.cn
http://qFa5sUBv.cLqpj.cn
http://koHnjJqw.cLqpj.cn
http://9z4Z7cCX.cLqpj.cn
http://KPXay0ch.cLqpj.cn
http://CCAmyKkH.cLqpj.cn
http://t2Mu4ugI.cLqpj.cn
http://SXhHGwR9.cLqpj.cn
http://An0ebBNS.cLqpj.cn
http://s0NQjfe6.cLqpj.cn
http://drTlmgIQ.cLqpj.cn
http://XoWjuntf.cLqpj.cn
http://J08c7RgL.cLqpj.cn
http://XpRSFIpz.cLqpj.cn
http://3iFq1XcG.cLqpj.cn
http://cIzRSD7A.cLqpj.cn
http://mhaVKt4A.cLqpj.cn
http://MhReECR0.cLqpj.cn
http://lCL99Qts.cLqpj.cn
http://057RfDtj.cLqpj.cn
http://www.dtcms.com/a/369703.html

相关文章:

  • [2025.9.5]Win11.26H2.27934.1 IoT 金丝雀轻度精简优化版 PIIS出品
  • 无名信号量
  • IPD变革,是中国企业实现产品与技术领先之路
  • 在Windows中已经启动的容器(比如xinference),如何设置让其在每次Docker启动时能自动启动
  • 支付DDD建模
  • Nginx 配置详解与虚拟主机实战指南
  • 驱动员工的核心:少谈“大道理”,多解“人心”
  • 【LLM】使用 Transformer 强化学习的 GRPO
  • 【代码随想录算法训练营——Day3】链表——203.移除链表元素、707.设计链表、206.反转链表
  • 目标检测双雄:一阶段与二阶段检测器全解析
  • 2025高教社数学建模国赛C题 - NIPT的时点选择与胎儿的异常判定(完整参考论文)
  • keil 5 STM32工程介绍
  • C/C++包管理工具:Conan
  • 标注格式转换csv转xml
  • 错误是ModuleNotFoundError: No module named ‘pip‘解决“找不到 pip”
  • 文章采集发布帝国ECMS网站技巧
  • 创新、绿色、共赢:芬兰企业在华发展战略与案例解析(2025中芬建交75周年)
  • PAIN | 痛在你身,激活在我脑:原来后侧默认模式网络是‘感同身受’的神经开关
  • 【C++】Vector完全指南:动态数组高效使用
  • 状压 dp --- TSP 问题
  • 【数字孪生核心技术】什么是倾斜摄影?
  • 公共卫浴感应开关选红外还是雷达
  • 解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题
  • 计算机二级C语言操作题(填空、修改、设计题)——真题库(17)附解析答案
  • 上位机通信基础知识
  • Acrobat-2025.001.20643_Win中文_PDF编辑器_便携版安装教程
  • Java基础 9.5
  • javafx笔记
  • 大基座模型与 Scaling Law:AI 时代的逻辑与困境
  • 扩展与改进的密钥协商协议