Java 自封装 MD5加密+随机盐 工具类

前言

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

原理

MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

springframework

org.springframework.util.DigestUtils为我们提供了实现MD5加密的工具类库,这个工具类库专门封装MD5加密的代码,有兴趣可以看一下源码。

自封装工具类

/**
 * 密码工具类
 * @author chenlirun
 * @date 2021/7/8 17:04
 */
public class PasswordUtil {

    // 固定随机盐
    public static final String SECRET="z3g8r3h4bS8DFG0R";

    /**
     * md5+salt 加密算法 (推荐)
     * @author chenlirun
     * @date 2021/7/8 17:09
     */
    public static String getMD5Encryption(String password,String salt){
        //密码md5+随机盐加密
        return DigestUtils.md5DigestAsHex((password+salt).getBytes(StandardCharsets.UTF_8));
    }

    /**
     * md5+salt 加密算法
     * @author chenlirun
     * @date 2021/7/9 8:56
     */
    public static String getMd5Encryption(String password){
        return DigestUtils.md5DigestAsHex((password+SECRET).getBytes(StandardCharsets.UTF_8));
    }
    
    /**
     * 生成随机盐
     * @author chenlirun
     * @date 2021/7/8 15:56
     */
    public static String getSalt(){
        String str="zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP1234567890,.<>:?";
        Random random = new Random();
        StringBuffer stringBuffer = new StringBuffer();
        //循环16次,共取出16个随机字符
        for (int i = 0; i < 16; i++) {
            //每次生成一个67以内的随机数
            int number = random.nextInt(68);
            //生成的随机数作为 str 字符串的下标;从 str 中取出随机字符后追加到 stringBuffer
            stringBuffer.append(str.charAt(number));
        }
        return stringBuffer.toString();
    }
}
	

测试工具类库

	@Test
    public void md5(){
        String password="123456";
        //生成随机盐
        String salt = PasswordUtil.getSalt();

        String md5Encryption = PasswordUtil.getMD5Encryption(password, salt);
        System.out.println("md5+随机盐:"+md5Encryption);
        String md5Encryption1 = PasswordUtil.getMd5Encryption(password);
        System.out.println("MD5+固定盐值:"+md5Encryption1);
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平平常常一般牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值