|
@@ -0,0 +1,41 @@
|
|
|
+package org.springblade.common.utils;
|
|
|
+
|
|
|
+import java.security.SecureRandom;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+public class PasswordGeneratorUtil {
|
|
|
+
|
|
|
+ private static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
+ private static final String LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
|
|
|
+ private static final String DIGITS = "0123456789";
|
|
|
+ private static final String SPECIAL_CHARS = "!@#$%^&*()_+[]{}|;:'\",.<>?/~`\\-=";
|
|
|
+
|
|
|
+ private static final int MIN_LENGTH = 10;
|
|
|
+ private static final SecureRandom RANDOM = new SecureRandom();
|
|
|
+
|
|
|
+ public static String generatePassword(int length) {
|
|
|
+ if (length < MIN_LENGTH) {
|
|
|
+ throw new IllegalArgumentException("Password length must be at least " + MIN_LENGTH + " characters.");
|
|
|
+ }
|
|
|
+ List<Character> passwordChars = new ArrayList<>();
|
|
|
+
|
|
|
+ passwordChars.add(UPPERCASE.charAt(RANDOM.nextInt(UPPERCASE.length())));
|
|
|
+ passwordChars.add(LOWERCASE.charAt(RANDOM.nextInt(LOWERCASE.length())));
|
|
|
+ passwordChars.add(DIGITS.charAt(RANDOM.nextInt(DIGITS.length())));
|
|
|
+ passwordChars.add(SPECIAL_CHARS.charAt(RANDOM.nextInt(SPECIAL_CHARS.length())));
|
|
|
+ String allChars = UPPERCASE + LOWERCASE + DIGITS + SPECIAL_CHARS;
|
|
|
+ for (int i = 4; i < length; i++) {
|
|
|
+ passwordChars.add(allChars.charAt(RANDOM.nextInt(allChars.length())));
|
|
|
+ }
|
|
|
+ // Shuffle the characters to ensure randomness
|
|
|
+ Collections.shuffle(passwordChars);
|
|
|
+ // Convert list to string
|
|
|
+ StringBuilder password = new StringBuilder();
|
|
|
+ for (char c : passwordChars) {
|
|
|
+ password.append(c);
|
|
|
+ }
|
|
|
+ return password.toString();
|
|
|
+ }
|
|
|
+}
|