编程语言
首页 > 编程语言> > MD5加密算法

MD5加密算法

作者:互联网

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
    /**
     * MD5加密的算法
     */
    public static String md5(String text) {
        //MessageDigest:接收任意大小,输出固定哈希值
        MessageDigest digest = null;
        try {
            digest = MessageDigest.getInstance("md5");
            //最后更新,完成摘要计算
            byte[] result = digest.digest(text.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : result) {
                //1.将数据全部转化为整数
                // 解释:为什么采用b&0xff
                /*
                 * b:它本来是一个byte类型的数据(1个字节) 0xff即255:是一个int类型的数据(4个字节)
                 * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型  b: 1001 1100(原始数据)
                 * 运算时:
                 *   b: 0000 0000 0000 0000 0000 0000 1001 1100
                 * 255: 0000 0000 0000 0000 0000 0000 1111 1111
                 * 运算结果:
                 * 0000 0000 0000 0000 0000 0000 1001 1100 此时的number是一个int类型的整数
                 */
                int number = 0 & 0xff;
                // 2.将所有的数据转换成16进制的形式
                // 注意:转换的时候注意(0<=hex<16),如果使用Integer.toHexString(),可能会造成缺少位数,需要补0
                // 因此,需要对hex的长度进行判断
                //hex.length==1: 0<=hex<=0xf 即 hex为[0,15]中的任何一个数
                String hex = Integer.toHexString(number);
                if (hex.length() == 1) {
                    sb.append("0" + hex);
                } else {
                    sb.append(hex);
                }
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return " ";
        }
    }
}

 转载:https://www.cnblogs.com/CQY1183344265/p/5851456.html#undefined

标签:MessageDigest,0000,int,加密算法,类型,byte,digest,MD5
来源: https://www.cnblogs.com/chaunceyji/p/10499500.html