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