package com.hdl.sdk.connect.cloud; import java.io.File; import java.io.FileInputStream; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * Created by Tong on 2021/11/3. */ public final class MD5Utils { /** * MD5转字符串 */ public static String encodeMD5(String s) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(s.getBytes("UTF-8")); byte[] messageDigest = digest.digest(); return toHexString(messageDigest); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { e.printStackTrace(); } return ""; } private static String toHexString(byte[] keyData) { if (keyData == null) { return null; } int expectedStringLen = keyData.length * 2; StringBuilder sb = new StringBuilder(expectedStringLen); for (byte keyDatum : keyData) { String hexStr = Integer.toString(keyDatum & 0x00FF, 16); if (hexStr.length() == 1) { hexStr = "0" + hexStr; } sb.append(hexStr); } return sb.toString(); } /** * MD5转字符串 * 额外值 */ public static String encodeMD52(String s) { char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { byte[] btInput = s.getBytes("utf-8"); MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(btInput); byte[] md = digest.digest(); int j = md.length; char[] str = new char[j * 2]; int k = 0; for (byte byte0 : md) { str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } } /** * MD5文件转字符串 */ public static String encodeMD5(File f) { if (!f.isFile()) { return null; } MessageDigest digest; byte[] buffer = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); FileInputStream in = new FileInputStream(f); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } in.close(); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); } public static String encrypt(String raw) { String md5Str = raw; try { MessageDigest md = MessageDigest.getInstance("MD5"); // 创建一个MD5算法对象 md.update(raw.getBytes()); // 给算法对象加载待加密的原始数据 byte[] encryContext = md.digest(); // 调用digest方法完成哈希计算 int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < encryContext.length; offset++) { i = encryContext[offset]; if (i < 0) { i += 256; } if (i < 16) { buf.append("0"); } buf.append(Integer.toHexString(i)); // 把字节数组逐位转换为十六进制数 } md5Str = buf.toString(); // 拼装加密字符串 } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return md5Str.toUpperCase(); // 输出大写的加密串 } }