前言
翻看了之前买的课程,今天又重温了一遍之前的代码,每次查看也总是能发现自己不足的地方,这里也开始做一个记录。也算是开始对项目复习。
系列文章如下:
章节名称 | 博客地址 |
---|---|
安装部署Redis | 集成Redis(已完结) |
页面登陆功能设计 | 登录功能设计(更新优化中) |
秒杀页面具体设计 | 秒杀详情页(已完结) |
JMeter初级压测学习 | Jmeter压测入门学习(已完结) |
页面优化设计 | 页面优化设计(已完结) |
接口优化 | RabbbitMq接口优化(已完结) |
图形验证码等 | 图形验证码及接口防刷(更新优化中) |
两次MD5加密设置。
之前学习过就是以用户登录时候设置是以用户名作为盐值来实现MD5加密服务,现在使用固定的盐值(当然这个盐值还是在数据库中进行读取)下面可以看一下数据库的设计:
这里我们指定一个盐值,在进行加密时候加入到其中。这里我们进行的两次MD5操作一方面是保证对于数据在网络上传输时候,我们输入的密码传输到服务端时候在向底层传输时候进行一级的加密操作。这个时候在服务端操作的密码也不是明文。第二个方面是在防止别人对我们的数据库盗取时候,不会因为一级加密就简单进行反解密拿到我们的数据库密码,在服务端中存到底层的密码是二度加密过。
前端设计
在拿到用户输入的密码以后我们先进行一个初级加密,这个加密的流程和盐值都是和后端相同的。
前端这样设计,保证拿到后端的密码是进行过一级加密的。
这里介绍一下自己定义的工具类。
public class MD5Util {
public static String md5(String src){
return DigestUtils.md5Hex(src);
}
private static final String salt = "1a2b3c4d";
public static String inputPassToFormPass(String inputPass) {
String str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
System.out.println(str);
// 一级加密
return md5(str);
}
public static String formPassToDBPass(String formPass, String salt) {
String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5) + salt.charAt(4);
// 二级加密
return md5(str);
}
public static String inputPassToDbPass(String inputPass, String saltDB) {
String formPass = inputPassToFormPass(inputPass);
String dbPass = formPassToDBPass(formPass, saltDB);
// 结合起来的一次完整加密。
return dbPass;
}
}
这样,在密码传到后台时候是已经进行过一级的加密操作。然后再进行自定义工具类的二级加密,判断和从数据库中根据用户名取出的密码是否相同来进行下一步操作。打印出