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

1957

被折叠的 条评论
为什么被折叠?



