Java-MD5加盐加密解密工具类

对于密码等敏感性较高的数据,进行MD5加密操作,并解密对比进行校验。

实操代码如下:

public class SaltEncryptAndDecryptUtil {

    /**
     * 加密(加盐处理)
     *
     * @param password 待加密密码(需要加密的密码)
     * @return 加密后的密码
     */
    public static String encrypt(String password) {
        // 随机盐值 UUID
        String salt = UUID.randomUUID().toString().replaceAll(StrPool.DASH, StrPool.EMPTY);
        // 密码 = md5(随机盐值+密码)
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return salt + StrPool.DOLLAR + finalPassword;
    }

    /**
     * 解密
     *
     * @param password   要验证的密码(未加密)
     * @param dbPassword 数据库中的加了盐值的密码
     * @return 对比结果 true OR false
     */
    public static boolean decrypt(String password, String dbPassword) {
        boolean result = false;
        if (StringUtils.hasLength(password) && StringUtils.hasLength(dbPassword)) {
            if (dbPassword.length() == 65 && dbPassword.contains(StrPool.DOLLAR)) {
                String[] dbPasswordArr = dbPassword.split(StrPool.BACK_SLASH + StrPool.DOLLAR);
                // 盐值
                String salt = dbPasswordArr[0];
                String finalPassword = dbPasswordArr[1];
                // 使用同样的加密算法和随机盐值生成最终加密的密码
                password = DigestUtils.md5DigestAsHex((salt + password).getBytes());
                if (finalPassword.equals(password)) {
                    result = true;
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        // 加密
        String encrypt = encrypt("123456");
        // 解密之后进行比对
        boolean decrypt = decrypt("123456", encrypt);
        System.out.println(encrypt); // d17e075b318d41eea9050c3315737efe$c873da6ab7e06d90d7fb80ffd13819e5
        System.out.println(decrypt); // true
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值