Browse Source

优化id generator

zhou-hao 3 years ago
parent
commit
c9af0310db

+ 4 - 11
hsweb-core/src/main/java/org/hswebframework/web/id/IDGenerator.java

@@ -19,6 +19,7 @@
 package org.hswebframework.web.id;
 
 import org.hswebframework.utils.RandomUtil;
+import org.hswebframework.web.utils.DigestUtils;
 
 import java.math.BigInteger;
 import java.security.MessageDigest;
@@ -41,7 +42,7 @@ public interface IDGenerator<T> {
 
     @SuppressWarnings("unchecked")
     static <T> IDGenerator<T> getNullGenerator() {
-        return (IDGenerator) NULL;
+        return (IDGenerator<T>) NULL;
     }
 
     /**
@@ -55,17 +56,9 @@ public interface IDGenerator<T> {
     IDGenerator<String> RANDOM = RandomUtil::randomChar;
 
     /**
-     * md5(uuid()+random())
+     * md5(uuid())
      */
-    IDGenerator<String> MD5 = () -> {
-        try {
-            MessageDigest md = MessageDigest.getInstance("MD5");
-            md.update(UUID.generate().concat(RandomUtil.randomChar()).getBytes());
-            return new BigInteger(1, md.digest()).toString(16);
-        } catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException(e);
-        }
-    };
+    IDGenerator<String> MD5 = () -> DigestUtils.md5Hex(UUID.generate());
 
     /**
      * 雪花算法

+ 60 - 0
hsweb-core/src/main/java/org/hswebframework/web/utils/DigestUtils.java

@@ -0,0 +1,60 @@
+package org.hswebframework.web.utils;
+
+import org.apache.commons.codec.binary.Hex;
+
+import java.security.MessageDigest;
+
+public class DigestUtils {
+
+    public static final MessageDigest md5 = org.apache.commons.codec.digest.DigestUtils.getMd5Digest();
+    public static final MessageDigest sha256 = org.apache.commons.codec.digest.DigestUtils.getSha256Digest();
+    public static final MessageDigest sha1 = org.apache.commons.codec.digest.DigestUtils.getSha1Digest();
+
+    public static byte[] md5(byte[] data) {
+        return org.apache.commons.codec.digest.DigestUtils.digest(md5, data);
+    }
+
+    public static byte[] md5(String str) {
+        return md5(str.getBytes());
+    }
+
+    public static String md5Hex(String str) {
+        return Hex.encodeHexString(md5(str.getBytes()));
+    }
+
+    public static byte[] sha256(byte[] data) {
+        return org.apache.commons.codec.digest.DigestUtils.digest(sha256, data);
+    }
+
+    public static byte[] sha256(String str) {
+        return sha256(str.getBytes());
+    }
+
+    public static String sha256Hex(String str) {
+        return Hex.encodeHexString(sha256(str.getBytes()));
+    }
+
+    public static byte[] sha1(byte[] data) {
+        return org.apache.commons.codec.digest.DigestUtils.digest(sha1, data);
+    }
+
+    public static byte[] sha1(String str) {
+        return sha1(str.getBytes());
+    }
+
+    public static String sha1Hex(String str) {
+        return Hex.encodeHexString(sha1(str.getBytes()));
+    }
+
+    public static byte[] digest(MessageDigest digest, byte[] data) {
+        return org.apache.commons.codec.digest.DigestUtils.digest(digest, data);
+    }
+
+    public static byte[] digest(MessageDigest digest, String str) {
+        return digest(digest, str.getBytes());
+    }
+
+    public static String digestHex(MessageDigest digest, String str) {
+        return Hex.encodeHexString(digest(digest, str));
+    }
+}