From 6caf2f815cbbfecdb69b90d976b5b83a2fd38458 Mon Sep 17 00:00:00 2001 From: Romesum Date: Wed, 6 May 2020 17:32:56 +0800 Subject: [PATCH] =?UTF-8?q?[feat][M]:=E6=96=B0=E5=A2=9EMD5=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hzu/bookingsystem/utils/MD5Util.java | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 java/src/main/java/com/hzu/bookingsystem/utils/MD5Util.java diff --git a/java/src/main/java/com/hzu/bookingsystem/utils/MD5Util.java b/java/src/main/java/com/hzu/bookingsystem/utils/MD5Util.java new file mode 100644 index 0000000..f811c94 --- /dev/null +++ b/java/src/main/java/com/hzu/bookingsystem/utils/MD5Util.java @@ -0,0 +1,104 @@ +package com.hzu.bookingsystem.utils; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 1.MD5加密字符串(32位大写) + * 2.MD5加密字符串(32位小写) + * 3.将二进制字节数组转换为十六进制字符串 + * 4.Unicode中文编码转换成字符串 + */ +public class MD5Util { + + /** + * MD5加密字符串(32位大写) + * + * @param string 需要进行MD5加密的字符串 + * @return 加密后的字符串(大写) + */ + public static String md5Encrypt32Upper(String string) { + byte[] hash; + try { + //创建一个MD5算法对象,并获得MD5字节数组,16*8=128位 + hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("Huh, MD5 should be supported?", e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("Huh, UTF-8 should be supported?", e); + } + + //转换为十六进制字符串 + StringBuilder hex = new StringBuilder(hash.length * 2); + for (byte b : hash) { + if ((b & 0xFF) < 0x10) hex.append("0"); + hex.append(Integer.toHexString(b & 0xFF)); + } + return hex.toString().toUpperCase(); + } + + /** + * MD5加密字符串(32位小写) + * + * @param string 需要进行MD5加密的字符串 + * @return 加密后的字符串(小写) + */ + public static String md5Encrypt32Lower(String string) { + byte[] hash; + try { + //创建一个MD5算法对象,并获得MD5字节数组,16*8=128位 + hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("Huh, MD5 should be supported?", e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("Huh, UTF-8 should be supported?", e); + } + + //转换为十六进制字符串 + StringBuilder hex = new StringBuilder(hash.length * 2); + for (byte b : hash) { + if ((b & 0xFF) < 0x10) hex.append("0"); + hex.append(Integer.toHexString(b & 0xFF)); + } + return hex.toString().toLowerCase(); + } + + /** + * 将二进制字节数组转换为十六进制字符串 + * + * @param bytes 二进制字节数组 + * @return 十六进制字符串 + */ + public static String bytesToHex(byte[] bytes) { + StringBuffer hexStr = new StringBuffer(); + int num; + for (int i = 0; i < bytes.length; i++) { + num = bytes[i]; + if (num < 0) { + num += 256; + } + if (num < 16) { + hexStr.append("0"); + } + hexStr.append(Integer.toHexString(num)); + } + return hexStr.toString().toUpperCase(); + } + + /** + * Unicode中文编码转换成字符串 + */ + public static String unicodeToString(String str) { + Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))"); + Matcher matcher = pattern.matcher(str); + char ch; + while (matcher.find()) { + ch = (char) Integer.parseInt(matcher.group(2), 16); + str = str.replace(matcher.group(1), ch + ""); + } + return str; + } +}