Java的MD5加密,简单使用,包含加盐脱盐

本文介绍了如何在Java中实现MD5加密,并结合加盐和脱盐的过程。通过导入commons-codec库,创建MD5Util工具类,提供加密、加盐和脱盐的方法。MD5Util中包括基本的MD5加密、加盐生成新的MD5值以及根据盐位置进行脱盐还原原始MD5的方法。

1.导包

<!-- 摘要运算、编码支持 -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.9</version>
</dependency>

2.编写工具类

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
    public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        String pwd="111";
        System.out.println(md5(pwd));
        String ss=md5(pwd,Config.MD5SALT);
        System.out.println(ss);
        System.out.println(md5NotSalt(ss,Config.MD5SALT));

    }

    public static String md5(String str)
    {
        if(str==null)
            throw new RuntimeException("md5加密参数不允许为null");
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest(str.getBytes("UTF-8"));
            return new BigInteger(1, bytes).toString(16);
        }catch (Exception ex)
        {
            throw new RuntimeException("md5加密错误"+ex.getMessage(),ex);
        }
    }

    //MD5加盐
    public static String md5AddSalt(String str,int[] salt)//[3,8,12,13,20,23]
    {
        String old=md5(str);
        StringBuilder sb=new StringBuilder(old);
        for(int n=salt.length-1;n>=0;n--)
        {
            int r=(int)(Math.random()*10);
            sb.insert(salt[n],r);
        }
        return sb.toString();
    }

    //脱盐
    public static String md5NotSalt(String saltMd5Str,int[] salt)
    {
        StringBuilder sb=new StringBuilder(saltMd5Str);
        for(int n=0;n<salt.length;n++)
        {
            sb.deleteCharAt(salt[n]);
        }
        return sb.toString();
    }
}

3.编写MD5配置文件,内容为加盐的位置:

public final class Config {
    public static final int[] MD5SALT = new int[]{2,4,5,13,20,23};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值