2-1 设计登陆表, 两次MD5加密

1、数据库设计

2、明文密码两次MD5处理

3、JSR303参数校验+全局异常处理器

4、分布式Session

1、数据库设计:

设计登录表 miaosha_user:

2-1 设计登陆表, 两次MD5加密_第1张图片

2-1 设计登陆表, 两次MD5加密_第2张图片

2-1 设计登陆表, 两次MD5加密_第3张图片

2、明文密码两次MD5处理

http在网络中是通过明文来进行传输的,如果用户登陆时输入的用户名和密码不做处理。那么如果数据包对别人截取到了,就能过得到数据包中的明文密码。

两次MD5:

第一次加密: 将用户输入的明文密码加上固定Salt 之后进行MD5加密,然后在网络中进行传输。当传输到达服务器端的时候,进行第二次加密。

用户端: PASS = MD5(明文 + 固定Salt)

第二次加密:第一次加密后的密文和一个随机Salt结合之后,再进行一次MD5加密(这是为了防止数据库被盗,如果只进行一次MD5加密的话,可以通过反查表的方式推算出明文密码)。

服务端: PASS = MD5(用户输入 + 随机Salt)

首先,需要在pom.xml中引入MD5相关的依赖:


  commons-codec
  commons-codec


  org.apache.commons
  commons-lang3
  3.6

然后,新建包 com.mydre.miaosha.util,在这个包下面新建类 MD5Util.java:

package com.mydre.miaosha.util;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Util {
public static String md5(String str){
return DigestUtils.md5Hex(str);
}
public static final String salt = "1a2b3c4d";
public static String inputPassFormPass(String inputPass){//第一次加密
String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
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 formInputPassToDBPass(String inputPass, String saltDB){//将两次加密过程合在一起。
String transferPass = inputPassFormPass(inputPass);
String dbPass = formPassToDBPass(transferPass, saltDB);
return dbPass;
}
public static void main(String []args){
System.out.println(formPassToDBPass(inputPassFormPass("123456"),"1a2b3c4d"));
System.out.println(formInputPassToDBPass("123456","1a2b3c4d"));
}
}


你可能感兴趣的:(2-1 设计登陆表, 两次MD5加密)