转自:
https://juejin.cn/post/6916150628955717646

在介绍具体方案之前,首先先介绍一下常见的加密算法。

加密算法可以分为三大类:

  • 对称加密算法
  • 非对称加密算法
  • Hash 算法

对称加密算法

加密和解密使用的是相同的密钥。对称加密算法的加解密速度快,但安全性较差。

常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6 和 AES。

非对称加密算法

加密和解密使用的是不同的密钥,也称为公私钥加密。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端的情况下,甚至能比非对称加密慢上 1000 倍。但安全性比对称加密算法高。

常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。

Hash 算法

Hash 算法的特别之处在于它是一种单向算法,用户可以通过 Hash 算法对目标信息生成一段特定长度的唯一的 Hash 值,却不能通过这个Hash 值重新获得目标信息。Hash 算法常用在不可还原的密码存储、信息完整性校验等场景。

常见的 Hash 算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1。

用户管理模块中但凡涉及到密码的地方都需要进行加密处理。

admin 账户激活

平台默认包含一个 admin 账号,admin 账号在初次使用时都需要激活密码,调用激活接口时,前端传输给后端的密码需要进行加密。

用户登陆

激活完成后,admin 账号才可以进行登陆,调用登陆接口时,如果不对密码进行加密,明文传输会被不法分子利用,导致数据泄露等安全问题。

用户创建

admin 账号创建普通用户时,需要给普通用户设置初始密码,因此调用用户创建接口时,前端传输给后端的数据需要进行加密处理。

用户信息修改

用户信息修改时可以修改密码,因此调用修改用户信息接口时,前端将数据传输给后端时需要进行加密处理。

数据入库

admin 账号创建普通用户时,会给普通用户设置初始密码,这部分数据都是保存在数据库中的,admin 账户激活时的密码也是保存在数据库中的。但是数据库也存在被攻击的可能性,有可能会导致用户数据被盗,因此对入库的数据中安全级别较高的字段需要进行加密处理,这里很明显用户的密码是需要进行加密后再入库的。

如何选择加密算法实现加密功能?

admin 账号激活

admin 账号必须对密码进行解密,所以只可以选择对称加密和非对称加密算法。因此 admin 账号激活采用 RSA 加密算法和 AES128 加密算法,由 Web 端管理公钥和私钥。

  1. Web 端发送 base64 编码后的 RSA 加密算法生成的公钥
  2. Server 端 base64 解码公钥
  3. Server 端随机生成一个 16 位的随机字符串
  4. Server 端使用公钥对生成的随机字符串进行加密
  5. Server 端将加密后的随机字符串再进行 base64 编码,并发送给 Web 端
  6. Web 端 base64 解码随机字符串
  7. Web 端对 base64 解码后的字符串再使用私钥解码
  8. Web 端将密码拼接为新的字符串,新的字符串为随机字符串 + 密码
  9. Web 端将随机字符串作为 AES 加密算法的密码对密码进行加密,并发送给 Server 端
  10. Server 端使用随机字符串对新的字符串进行解密
  11. Server 端解析解密后的字符串,校验随机字符串是否一致
  12. Server 端解析出字符串中的密码,并对密码进行加密入库

数据入库加密的密钥和对随机字符串加密的密钥是不相同的。

由 Server 端管理公钥和私钥,Web 端获取公钥并对密码加密,并发送给 Server 端,Server 端再使用私钥解密密码,这样也没毛病。

小心中间人攻击

什么是中间人攻击?

中间人攻击(Man-in-the-MiddleAttack,简称“MITM 攻击”)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为它们正在通过一个私密的连接与对方直接对话,但是事实上整个会话都已经被攻击者完全控制了。

在中间人攻击中,攻击者可以拦截通讯双方的通话,并插入新的内容。中间人攻击是一个缺乏相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如,SSL 协议可以验证参与通讯的一方或双方所使用的证书是否是由权威的受信任的数字证书认证机构颁发,并且能执行双向身份认证。

中间人攻击过程如下:

  1. 客户端发送请求到服务端,请求被中间人截获
  2. 服务器向客户端发送公钥
  3. 中间人截获公钥,保留在自己手上。然后自己生成一个伪造的公钥发给客户端
  4. 客户端收到伪造的公钥后,生成加密 Hash 值发给服务器
  5. 中间人获得加密 Hash 值,用自己的私钥解密获得真秘钥。同时生成假的加密 Hash 值,发给服务器
  6. 服务器用私钥解密获得假密钥。然后加密数据传输给客户端

如果直接发送公钥给 Web 端,就很容易被中间人攻击,导致数据泄露。

用户登陆

用户登陆时,对密码进行校验是可以不需要进行解密的,因此用户登陆选择的是 Hash 算法中的 MD5 加密算法,虽然 MD5 是可以被破解的,但是为了能够和其他部门进行对接,只能选择 MD5 加密算法。

  1. 前端 MD5 加密密码
  2. 服务端查询指定用户的密码
  3. 将数据库查询到的密码用私钥进行解密
  4. 将解密后的密码进行 MD5 加密,并和前端传入的密码进行比对

用户创建 & 用户信息修改

使用 AES128 加密算法,和激活使用的公钥相同。

数据入库

使用 AES128 加密算法,和激活所使用的公钥不为同一个。

【转】用户管理模块:如何保证用户数据安全?相关推荐

  1. 统一项目管理平台(UMPlatForm.NET)-4.5 用户管理模块

    统一项目管理平台(UMPlatForm.NET)-4.5 用户管理模块 4.4 用户管理模块 用户管理模块主要是对可登录系统的用户进行管理.后续的工作如:用户归属角色.权限的分配.用户所拥有的相应功能 ...

  2. jsp mysql修改密码_Servlet+JSP+MySQL实现用户管理模块之七、实现用户信息更新和重置密码...

    实现用户信息更新和重置密码功能 如果用户信息很多的时候,感觉这项实现起来比较麻烦的.因为要考虑用户哪些信息需要更新哪些不需要更新,就必须先更原来的信息比对.呵呵,当然如果考虑到多个数据库表间的操作的话 ...

  3. 六、模块实现:用户管理模块(1)

    用户管理模块 配置类 首先,在包"com.example.demo"中新建一个"MybatisPlusConfig"类(在这个类中还可以对mybatis-plu ...

  4. 3.JAVAEE-电子商城-用户管理模块

    文章目录 一.实现步骤 1.后端:实体类[po层]-->实体的Mapper接口[dao层]-->实体接口的xml配置文件[dao层]-->实体的Service接口[service层] ...

  5. 71-项目的广告管理模块和用户管理模块

    项目的广告管理模块和用户管理模块 在上一个博客中(70章博客),我们完成了课程管理模块,接下来我们完成广告管理模块和用户管理模块 广告管理模块: 实现以下功能: 广告位列表查询 添加广告位 回显广告位 ...

  6. (转)关于用户管理模块

    (转)关于用户管理模块 在SharePoint Portal Server 2003的时代,它被说得最多的一个问题就是其用户系统必须使用Active Directory,我们必须在域里面为用户创建相应 ...

  7. 后台服务器用户管理模块的解析

    后台服务器用户管理模块的解析目录            1: 用户管理模块的内容 2: 用户管理模块中内容的实现步骤大纲 用户列表的展现的步骤(使用分页查询的方式实现) 1:  用户管理模块的内容 包 ...

  8. Day84.尚好房 — 功能提取、页面封装、jquery-validate表单校验、完成角色 | 用户管理模块

    目录 角色管理模块 一.角色管理代码封装  ★ 1.封装BaseDao 2.封装BaseDao 3.封装BaseServiceImpl 4.封装Controller层 二.前端页面封装 1.封装头部c ...

  9. 【Jquery泛舟】巧用jqGrid+fine-uploader等利器打造完美的用户管理模块

    巧用jqGrid+fine-uploader等利器打造完美的用户管理模块 为什么要写这篇文章?哎,因为网上关于jqGrid的资料简直是乱地又乱,本身就是一个很复杂的框架,但是一搜资料千篇一律就那两三篇 ...

最新文章

  1. 【多线程】ConcurrentLinkedQueue 的实现原理
  2. 用一篇文章说清楚如何写作
  3. 后端开发开发mac装机和开发环境指南(新手版)
  4. 40名大学生被退学,教育部表态:学生对自己不负责,就要付出代价
  5. angular模态框位置_angular $modal 模态框
  6. html中可以编辑的文本,用BeautifulSoup编辑html中的文本
  7. LAMP架构超详细搭建步骤
  8. scsi设备扫描特征分析
  9. scrapy_redis分布式爬虫遇到的问题DEBUG: Filtered offsite request to
  10. Camera2 YUV420_888
  11. 微信公众平台如何授权第三方平台,干货到!微信公众号怎样添加第三方平台及取消授权
  12. AC 混合牛奶 (模拟)
  13. [随笔]python之print函数总结
  14. 全国青少年软件编程等级考试Python一级专题练习
  15. SHA1:3670e86d024ccecc39c2a237d550b2ce7e7d95b1
  16. Day918.测试金字塔 -SpringBoot与K8s云原生微服务实践
  17. 符合自己业务场景的自定义表单自定义报表及自定义图表
  18. ⑥【自监督学习 · 时空图神经网络 · 文献精读】知识图谱 | 推荐 | 命名实体识别NER | 空间-时间知识图谱 | 时空知识图 | 时空相似性
  19. 关于电源纹波的那些硬核内容都在这里了!
  20. CMOS和CCD传感器

热门文章

  1. C++ 调用7z进行解压缩,并返回解压缩进度和异常信息
  2. 用c语言编写两个数的最小公倍数,用C语言编写程序求两个数的最小公倍数,并输出...
  3. 医疗器械标准目录 第二部分专业技术领域(1)
  4. 路由声明式传参和编程式传参
  5. ETM地形编辑DEMO运行时出错问题
  6. jquery 编码解码
  7. 使用python的zipfile模块巧解word批量生成问题
  8. #华为模拟器eNSP
  9. PostgreSQL备机checkpoint
  10. 配置使用costmap_2d_node