SpringBoot登录设计---对密码进行两次Md5加密

第一次加密:
前端使用md5加密,将加密后的密码传给后端。
是为了防止在客户端向服务端传送用户信息时,密码被人截获,所以需要进行一次加密。

        var inputPass = $("#password").val();
        var salt = g_passsword_salt;
        var str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
        var password = md5(str);


		//salt
		var g_passsword_salt="9d5b364d"

第二次加密:
后端收到前端加密后的密码后,在存入数据库时再进行一次加密。

(1)需要导入的依赖:

		<!--MD5加密-->
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.8.1</version>
		</dependency>

(2)设置md5配置类:

/**
 * Description:MD5加密
 * Date: 2022/6/28 11:24
 **/
@Component
public class MD5Util {
    public static String md5(String src){
        return DigestUtils.md5Hex(src);
    }
    private static final String salt="9d5b364d";
    public static String inputPassToFromPass(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 inputPassToDBPass(String inputPass,String salt){
        String formPass = inputPassToFromPass(inputPass);
        String dbPass=formPassToDBPass(formPass,salt);
        return dbPass;
    }
//    后两个的输出密码应该是相同的
    public static void main(String[] args){
//        模拟第一次加密生成的密码(即前端加密生成的密码)
        System.out.println(inputPassToFromPass("123456"));
//        模拟第二次加密生成的密码
        System.out.println(formPassToDBPass("3457ceaeba3426466887369f1a1f7a88","9d5b364d"));
//        用户输入的密码--->存入数据库的密码的转换
        System.out.println(inputPassToDBPass("123456","9d5b364d"));
    }
}

(3)对传入参数进行校验:

需要导入的依赖:

		<!--参数校验-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>

MD5加密后通常是32位编码

    @NotNull(message = "密码不能为空")
    @Length(min = 32)
    private String password;

(4)登录时在service层验证密码是否正确:

//		传入参数 loginVo
		String password=loginVo.getPassword();
//        根据手机号验证用户是否存在
        User user = userMapper.selectByPhone(mobile);
        if(user==null){
            throw new GlobalException(ResponseBeanEnum.LOGIN_ERROR);
        }
//        验证密码是否正确 不正确则抛出异常
        if(!MD5Util.formPassToDBPass(password,user.getSalt()).equals(user.getPassword())){
            throw new GlobalException(ResponseBeanEnum.LOGIN_ERROR);
        }

你可能感兴趣的:(springBoot,java,spring,boot,后端)