Bootstrap

MD5加密 16位32位 大写小写

MD5加密是一种常用的加密方式,以下分享一个MD5加密工具类,常用于各种隐私信息的加密。

1.什么是MD5加密

MD5 信息摘要演算法(Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);
不同的输入得到的不同的结果(唯一性);

2.MD5算法的安全性

普遍认为MD5是很安全,因为暴力破解的时间是一般人无法接受的。实际上如果把用户的密码MD5处理后再存储到数据库,其实是很不安全的。因为用户的密码是比较短的,而且很多用户的密码都使用生日,手机号码,身份证号码,电话号码等等。或者使用常用的一些吉利的数字,或者某个英文单词。如果我把常用的密码先MD5处理,把数据存储起来,然后再跟你的MD5结果匹配,这时我就有可能得到明文。(碰撞)

3.java自带无需依赖

import java.security.MessageDigest;

public class MD5Util {
    /**
     * 生成32位小写的md5加密
     */
    public static String lowMD5_32(String plainText) {
        MessageDigest md5;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] md5Bytes = md5.digest(plainText.getBytes());
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
            plainText = hexValue.toString();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return plainText;
    }

    /**
     * 生成16位小写的md5加密
     */
    public static String lowMD5_16(String plainText) {
        String str = lowMD5_32(plainText);
        return str.substring(8, 24);
    }
    /**
     * 生成16位大写的md5加密
     */
    public static String upperMD5_16(String plainText) {
        String str = lowMD5_16(plainText).toUpperCase();
        return str;
    }
    /**
     * 生成32位大写的md5加密
     */
    public static String upperMD5_32(String plainText) {
        String str = lowMD5_32(plainText).toUpperCase();
        return str;
    }
    public static void main(String[] args) {
        String str = "helloworld123321123";//测试用例
        System.out.println("MD5小写16位:"+lowMD5_16(str));
        System.out.println("MD5小写32位:"+lowMD5_32(str));
        System.out.println("MD5大写16位:"+upperMD5_16(str));
        System.out.println("MD5大写32位:"+upperMD5_32(str));
    }
}

结果如下:

4.引入codec进行MD5加密

引入依赖

<!--MD5加密-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Utils {
    /*
    * MD5加密
    * @explain:借助Apache工具类DigestUtils实现
    * @params msg: 待加密字符串
    * @return :16进制加密字符串
    * */
    public static String encryToMD5(String msg){
        return DigestUtils.md5Hex(msg);
    }
    public static void main(String[] args) {
        String data = "hello";
        String endata = encryToMD5(data);
        System.out.println("MD5加密后:" + endata);
    }
}

;