目录
1 登陆模块
注册:
- 用户填写账号密码,点击注册
- 前端使用一个固定的salt值拼接到密码上
- 前端使用md5加密拼接后的密码
- 把拼接加密后的内容发送给后端
- 后端再随机生成一个salt值,再次拼接到密码上
- 后端把密码和那个随机生成的salt值都存到数据库里
登录:
- 用户提交密码,
- 前端使用一个固定的salt值拼接到密码上
- 前端使用md5加密拼接后的密码
- 把拼接加密后的内容发送给后端
- 后端从数据库里取出账号对应的密码 和 注册时生成的salt值
- 匹配 数据库中的密码 是否等于 前端传递的密码+salt值
两次MD5加密:出于安全考虑
第一次 (在前端加密,客户端):密码加密是(明文密码+固定盐值)生成md5用于传输,目的,由于http是明文传输,当输入密码若直接发送服务端验证,此时被截取将直接获取到明文密码,获取用户信息。
加盐值是为了混淆密码,原则就是明文密码不能在网络上传输。
第二次:在服务端再次加密,当获取到前端发送来的密码后。通过MD5(密码+随机盐值)再次生成密码后存入数据库。
防止数据库被盗的情况下,通过md5反查,查获用户密码。方法是盐值会在用户登陆的时候随机生成,并存在数据库中,这个时候就会获取到。
第二次的目的:
黑客若是同时黑掉数据库,通过解析前端js文件,知道如果md5加密的过程,就知道此时用户的密码。
但是此时我们要是在后端加入随机盐值和传输密码的md5组合,黑客是无法知道通过后端密码加密过程的,从而无法知道密码。
两次为什么一个固定,一个随机的salt:
因为登陆时需要从数据库中进行匹配,数据库可以保存随机salt值,进行解密所以可以用随机的salt。
0