Java MD5加密(3种加密方式详解)

Java MD5加密(3种加密方式详解)-mikechen

什么是MD5

MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字符串。

例如我们要加密一篇文章,那么我们会随机从每段话或者每行中获取一个字,把这些字统计出来后,再通过一定的运算获得一个固定长度的MD5加密后信息。因此,其很难被逆向破解。

 

MD5有哪些特点

针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常32位的16进制字符串);

其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。

运算简便,且可实现方式多样,通过一定的处理方式也可以避免碰撞算法的破解。

对于一个固定的字符串。数字等等,MD5加密后的字符串是固定的,也就是说不管MD5加密多少次,都是同样的结果。

 

Java MD5加密方式

1.JDK自带MessageDigest

public class MD5Util {
    
    public static String getMD5Str(String str) {
        byte[] digest = null;
        try {
            MessageDigest md5 = MessageDigest.getInstance("md5");
            digest  = md5.digest(str.getBytes("utf-8"));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //16是表示转换为16进制数
        String md5Str = new BigInteger(1, digest).toString(16);
        return md5Str;
    }

}

JDK自带MessageDigest优点:

可以加密多种算法如:MD5,SHA,SHA1,SHA-224,SHA-256,SHA-384,SHA-512

JDK自带MessageDigest缺点:

缺点代码语句较多,不方便

 

2.使用Spring的DigestUtils工具类

import org.springframework.util.DigestUtils;

//32位,小写
String md532Lower = DigestUtils.md5DigestAsHex("adcdefg".getBytes());
//32位,大写
String md532Upper=md532Lower.toUpperCase();
//16位,小写
String md516Lower =md532Lower.substring(8, 24);
//16位,大写
String md516Upper=md532Lower.substring(8, 24).toUpperCase();

Spring的DigestUtils工具类的优点:

方便,代码简洁

Spring的DigestUtils工具类的缺点:

缺点只可进行MD5加密

 

 

3.借助apache工具类DigestUtils

所需jar包:commons-codec.jar,maven pom.xml包如下:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>
/**
 * MD5加密之方法一
 * @explain 借助apache工具类DigestUtils实现
 * @param str
 *            待加密字符串
 * @return 16进制加密字符串
 */
public static String encryptToMD5(String str) {
    return DigestUtils.md5Hex(str);
}

apache工具类DigestUtils优点:

代码简洁,缺点,只能MD5加密

apache工具类DigestUtils缺点:

额外引用maven依赖或手动导入jar

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法