学习资料笔记

小木的学习笔记

Java MD5加密

2021-9-28 小木 Java

MD5加密很常用,比如数据库中密码等敏感字段需要加密存储,核对密码时先以同样的方式对用户输入的密码进行加密,再与数据库中存储的密码比较。

MD5加密有很多种实现方式,此处介绍2种。
注意:
只使用md5加密是不行的,很容易被破解。常见的做法有:

先对原串进行一些处理,比如先给它拼接一个字符串常量,再进行md5加密。即使对方解密,也获取不到原串。
使用多种加密算法。比如先用md5加密,再对加密的结果使用其它加密算法进行加密。比如先使用md5加密,对加密的结果再次使用md5加密。
这2种方式方式经常一起使用。

1、使用JDK自带MessageDigest
java.security.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);
        for (int i = 0; i < 32 - md5Str.length(); i++) {
            md5Str = "0" + md5Str;
        }
        return md5Str;
    }

}
2、使用Spring自带的DigestUtils【推荐】
org.springframework.util.DigestUtils
上面是自己封装,太麻烦,Spring已经给我们封装好了。
String md5Str = DigestUtils.md5DigestAsHex("需要加密字符串".getBytes());
 
使用方法:
@Test
public void testMd5() throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");
    // java自带工具包MessageDigest
    String resultString = MD5Util.getMD5Str("12345678");
    System.out.println(resultString);
    // 25d55ad283aa400af464c76d713c07ad
    String resultString1 = MD5Util.getMD5Str("12345");
    System.out.println(resultString1);
    //827ccb0eea8a706c4c34a16891f84e7b

    // spring自带工具包DigestUtils
    System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));
    // 827ccb0eea8a706c4c34a16891f84e7b
}






标签: MD5加密 Java MD5加密 Java MD5