md5加盐加密

package org.security;

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

import java.util.UUID;

/**
 * @author 50649
 */
public class SecurityUtil {
    /**
     * 加盐加密
     *
     * @param password
     * @return
     */
    public static String encrypt(String password) {
        // 每次生成内容不同的,但长度固定 32 位的盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 最终密码=md5(盐值+原始密码)
        String finalPassword = DigestUtils.md5Hex((salt + password).getBytes());
        return salt + finalPassword;
    }

    /**
     * 密码验证
     *
     * @param password      待验证密码
     * @param finalPassword 最终正确的密码(数据库中加盐的密码)
     * @return
     */
    public static boolean decrypt(String password, String finalPassword) {
        // 非空效验
        if (null == password || null == finalPassword) {
            return false;
        }
        if (finalPassword.length() != 64) {
            // 最终密码不正确
            return false;
        }
        // 盐值
        String salt = finalPassword.substring(0, 32);
        // 使用盐值+待确认的密码生成一个最终密码
        String securityPassword = DigestUtils.md5Hex((salt + password).getBytes());
        System.out.println("securityPassword=="+securityPassword);
        // 使用盐值+最终的密码和数据库的真实密码进行对比
        return (salt + securityPassword).equals(finalPassword);
    }

    public static void main(String[] args) {
        String password = "123";

//        System.out.println(SecurityUtil.encrypt(password)); // 4d94e438ab74495a8bb2fea0bf96887d9222409880242be59dbda7265d64418b
//        System.out.println(SecurityUtil.encrypt(password)); // 942890192ad04369a1667b2b0308a2640d052e9b17d422ec8e7925e81af95470
//        System.out.println(SecurityUtil.encrypt(password)); // b8fdcdbc855a41afa7d0135304bd826e025f7d140c66342f69833578d2d64776

        System.out.println(SecurityUtil.decrypt(password, "4d94e438ab74495a8bb2fea0bf96887d9222409880242be59dbda7265d64418b"));
        System.out.println(SecurityUtil.decrypt(password, "942890192ad04369a1667b2b0308a2640d052e9b17d422ec8e7925e81af95470"));
        System.out.println(SecurityUtil.decrypt(password, "b8fdcdbc855a41afa7d0135304bd826e025f7d140c66342f69833578d2d64776"));

    }

}

  

posted @ 2024-10-24 13:48  红尘沙漏  阅读(3)  评论(0编辑  收藏  举报