作者:何甜甜在哪 \链接:https://juejin.cn/post/691615...写在前面在介绍具体的解决方案之前,先介绍一下常见的加密算法.加密算法可分为三类:对称加密算法非对称加密算法哈希算法对称加密算法使用相同的密钥进行加密和解密。对称加密算法加解密速度快,但安全性较差常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES非对称加密算法使用不同的密钥进行加密和解密,也称为公私密钥加密。非对称加密的缺点是加密和解密的速度比对称加密慢很多,在某些极端情况下,甚至可以比非对称加密慢1000倍。但安全性高于对称加密算法常见的非对称加密算法:RSA、ECC(针对移动设备)、Diffie-Hellman、ElGamal、DSA(针对数字签名)哈希算法哈希算法的特殊之处在于它是单一Direction算法,用户可以通过Hash算法为目标信息生成一个特定长度的唯一Hash值,但不能通过这个Hash值重新获得目标信息。哈希算法常用于不可逆密码存储、信息完整性验证等,常用哈希算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1需要在用户中执行管理模块加密的地方在用户管理模块中,任何涉及到密码的地方都需要加密。管理员账号激活平台默认包含管理员账号。admin账号首次使用需要激活密码。调用激活接口时,需要激活前端传给后端的密码激活加密用户登录后,admin账号才能登录。调用登录接口时,如果密码未加密且明文传输,会被不法分子利用,造成数据泄露等安全问题。用户设置了初始密码,因此在调用用户创建接口时需要对前端传输到后端的数据进行加密。修改用户信息时可以修改用户信息。因此,在调用用户信息修改接口时,前端向后端传输数据时需要对数据进行加密。当使用admin账号处理数据入库时,在创建admin账号时会为普通用户设置一个初始密码。这部分数据保存在数据库中,admin账号激活时的密码也保存在数据库中。数据库不是保险箱,也有被攻击的可能,导致用户数据被盗。因此,对存储数据中安全级别较高的字段进行加密。显然,用户的密码需要加密以及如何选择加密算法来实现存储中的加密功能。需要激活admin账号才能解密密码,所以只能使用对称加密和非对称加密算法。因此,admin账户使用RSA加密算法和AES128加密算法激活,公钥和私钥由Web端管理。具体步骤如下:web端发送base64编码的RSA加密算法生成的公钥。生成16位随机字符串。服务器端使用公钥对生成的随机字符串进行加密。服务器端将加密后的随机字符串进行base64编码后发送给web端。Web端base64解码随机字符串。解码后的字符串在web端用私钥解码,密码拼接成新的字符串。新字符串是随机字符串+密码。Web端使用随机字符串作为AES加密算法的密码,对密码进行加密后发送给服务器服务器端使用随机字符串对新字符串进行解密。服务器端解析解密后的字符串,检查随机字符串是否一致。服务器端解析出字符串中的密码,并将密码加密存储。说明:数据在存储中加密的密钥与加密随机字符串的密钥不同。时序图如下:是不是觉得过程有点太复杂了?服务器端管理公钥和私钥,web端获取公钥加密密码发送给服务器端,服务器端是用私钥解密密码,所以没有错用它。小心中间人攻击。什么是中间人攻击?创建独立的连接并交换它们接收到的数据,使通信的两端认为他们正在通过私有连接直接对话,但实际上整个会话完全被攻击者控制。在中间人攻击中,攻击者可以拦截两个通信方之间的对话并插入新的内容。中间人攻击是一种(缺乏)相互身份验证攻击。大多数加密协议都特地添加了一些特殊的认证方式来防止中间人攻击。例如,SSL协议可以验证参与通信的一方或双方使用的证书是否由权威可信的数字证书认证机构颁发,可以进行双向身份认证。中间人拦截服务器并将公钥发送给客户端。中间人截获公钥,掌握在自己手中。然后自己生成一个【伪造的】公钥发给客户端。客户端收到伪造的公钥后,生成一个加密的哈希值发送给服务器中介得到加密的哈希值,用自己的私钥解密得到真正的秘钥。同时生成一个伪造的加密哈希值发送给服务器用私钥解密得到一个伪造的密钥。然后将加密后的数据传输给客户端。如果将公钥直接发到web上,很容易被中间人攻击,造成数据泄露。用户登录并验证密码而不解密。所以用户登录选择的是Hash算法。中的MD5加密算法,虽然MD5可以破译,但是为了能和其他部门对接,只能选择MD5加密算法。具体步骤如下:前端MD5加密密码服务器查询指定用户的密码,并使用数据库中查询到的密码私钥进行解密。解密后的密码用MD5加密后与前端传入的密码进行比对。时序图如下:创建用户&修改用户信息使用AES128加密算法,激活使用相同的公钥进行数据存储使用AES128加密算法与激活使用的公钥不同说明:以上过程省略了一些业务逻辑,比如密码格式校验等,本文主要介绍加解密的关键。总结使用HTTPS可以解决上面的用户数据加密问题,但是要花钱,老大自己想办法,让研发人员自己实现吧。这是我第一次在项目中遇到用户数据加密。可能还有一些不足需要改进。如有错误请指正。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
