实现两次md5加密

为什么需要两次md5加密?

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

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

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

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

引入MD5所需依赖

<dependency>
   <groupId>commons-codec</groupId>
   <artifactId>commons-codec</artifactId>
</dependency>
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.10</version>
</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"));
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页