实现两次md5加密

文章目录

    • 为什么需要两次md5加密?
    • 引入MD5所需依赖
    • 创建md5加密工具类

为什么需要两次md5加密?

1.用户端:Pass = MD5(明文+固定salt)

目的:防止被人恶意截取数据包,得到明文密码

2.服务端:Pass = MD5(用户输入+随机salt)

目的:万一数据库被盗,有可能通过反查表来得到密码

引入MD5所需依赖

<dependency>
   <groupId>commons-codecgroupId>
   <artifactId>commons-codecartifactId>
dependency>
<dependency>
   <groupId>org.apache.commonsgroupId>
   <artifactId>commons-lang3artifactId>
   <version>3.10version>
dependency>

创建md5加密工具类

package com.yang.util;

import org.apache.commons.codec.digest.DigestUtils;

public class MD5Util {
    /**
     * md5加密
     *
     * @param src 对一个加salt的密码进行md5加密
     * @return 返回md5加密后的结果
     */
    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }

    private static final String salt = "1a2b3c4d";

    /**
     * 明文密码第一次进行md5加密
     *
     * @param inputPass 表单输入的密码
     * @return 返回加密后的结果
     */
    public static String inputPassFormPass(String inputPass) {
        String str = salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }

    /**
     * @param formPass 表单前端密码+salt 被md5加密后的密码
     * @return 返回加salt md5后的密码
     */
    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);
    }

    /**
     * @param input  表单输入
     * @param saltDB 数据库salt
     * @return 由表单输入经过两次md5加密后存入数据库
     */
    public static String inputPassToDbPass(String input, String saltDB) {
        String formPass = inputPassFormPass(input);
        String DBPass = formPassToDBPass(formPass, saltDB);
        return DBPass;
    }

    public static void main(String[] args) {
        System.out.println(inputPassFormPass("123456"));
        System.out.println(formPassToDBPass(inputPassFormPass("123456"), "1a2b3c4d"));
    }
}

你可能感兴趣的:(Spring,Boot,数据库,md5)