Автор оригинала: mkyong.
Вот генератор паролей Java для создания безопасного пароля, состоящего из двух символов нижнего регистра, символов верхнего регистра, двух цифр, двух специальных символов, а остальные дополняются случайными символами, пока длина не достигнет 20 символов.
Требования к безопасному паролю:
- Пароль должен содержать не менее двух цифр
[0-9]
. - Пароль должен содержать не менее двух строчных латинских символов
[а-я]
. - Пароль должен содержать не менее двух прописных латинских символов
[А-Я]
. - Пароль должен содержать не менее двух специальных символов, таких как
! @ # &()
и т.д. - Пароль имеет длину
20
персонажи.
1. Генератор Безопасных Паролей Java
Ниже приведены шаги по созданию безопасного пароля:
- Определены все поддерживаемые символы.
- Получить случайные два символа из списка символов нижнего регистра
[а-я]
. - Получить случайные два символа из списка символов верхнего регистра
[А-Я]
. - Получить случайные два символа из списка цифр
[0-9]
. - Получите случайные два символа из списка специальных символов
[!@#&...]
. - Получите еще один случайный
12
символы из списка поддерживаемых символов (строчные, прописные, цифры и специальные символы). - Объедините все вышеперечисленное
20
случайные символы. - Перетасуйте результат в
шаге 7
, чтобы создать случайный порядок. - Это последний безопасный пароль.
package com.mkyong.regex.password; import java.security.SecureRandom; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class PasswordGenerator { private static final String CHAR_LOWERCASE = "abcdefghijklmnopqrstuvwxyz"; private static final String CHAR_UPPERCASE = CHAR_LOWERCASE.toUpperCase(); private static final String DIGIT = "0123456789"; private static final String OTHER_PUNCTUATION = "!@#&()â€"[{}]:;',?/*"; private static final String OTHER_SYMBOL = "~$^+=<>"; private static final String OTHER_SPECIAL = OTHER_PUNCTUATION + OTHER_SYMBOL; private static final int PASSWORD_LENGTH = 20; private static final String PASSWORD_ALLOW = CHAR_LOWERCASE + CHAR_UPPERCASE + DIGIT + OTHER_SPECIAL; private static SecureRandom random = new SecureRandom(); public static void main(String[] args) { generateStrongPassword(); } public static String generateStrongPassword() { StringBuilder result = new StringBuilder(PASSWORD_LENGTH); // at least 2 chars (lowercase) String strLowerCase = generateRandomString(CHAR_LOWERCASE, 2); System.out.format("%-20s: %s%n", "Chars (Lowercase)", strLowerCase); result.append(strLowerCase); // at least 2 chars (uppercase) String strUppercaseCase = generateRandomString(CHAR_UPPERCASE, 2); System.out.format("%-20s: %s%n", "Chars (Uppercase)", strUppercaseCase); result.append(strUppercaseCase); // at least 2 digits String strDigit = generateRandomString(DIGIT, 2); System.out.format("%-20s: %s%n", "Digits", strDigit); result.append(strDigit); // at least 2 special characters (punctuation + symbols) String strSpecialChar = generateRandomString(OTHER_SPECIAL, 2); System.out.format("%-20s: %s%n", "Special chars", strSpecialChar); result.append(strSpecialChar); // remaining, just random String strOther = generateRandomString(PASSWORD_ALLOW, PASSWORD_LENGTH - 8); System.out.format("%-20s: %s%n", "Others", strOther); result.append(strOther); String password = result.toString(); // combine all System.out.format("%-20s: %s%n", "Password", password); // shuffle again System.out.format("%-20s: %s%n", "Final Password", shuffleString(password)); System.out.format("%-20s: %s%n%n", "Password Length", password.length()); return password; } // generate a random char[], based on `input` private static String generateRandomString(String input, int size) { if (input == null || input.length() <= 0) throw new IllegalArgumentException("Invalid input."); if (size < 1) throw new IllegalArgumentException("Invalid size."); StringBuilder result = new StringBuilder(size); for (int i = 0; i < size; i++) { // produce a random order int index = random.nextInt(input.length()); result.append(input.charAt(index)); } return result.toString(); } // for final password, make it more random public static String shuffleString(String input) { Listresult = Arrays.asList(input.split("")); Collections.shuffle(result); // java 8 return result.stream().collect(Collectors.joining()); } }
Выход
Chars (Lowercase) : ob Chars (Uppercase) : AB Digits : 67 Special chars : <@ Others : IR{3Nl@@^+xE Password : obAB67<@IR{3Nl@@^+xE Final Password : AN@@b6RBxlI3o+^E{@7< Password Length : 20
2. Запустите генератор паролей пять раз.
Запустите пять раз и посмотрите случайные безопасные пароли.
public static void main(String[] args) { for (int i = 0; i < 5; i++) { generateStrongPassword(); } }
Выход
Chars (Lowercase) : fs Chars (Uppercase) : AD Digits : 45 Special chars : [â€" Others : UOJ:1?pn$CA{ Password : fsAD45[â€"UOJ:1?pn$CA{ Final Password : CAU5{f:pJ$[1Dns?AO4â€" Password Length : 20 Chars (Lowercase) : cl Chars (Uppercase) : LL Digits : 32 Special chars : :] Others : ${CS2R]k/J$# Password : clLL32:]${CS2R]k/J$# Final Password : 3]C:Jl{k2$2#S/]c$LLR Password Length : 20 Chars (Lowercase) : ae Chars (Uppercase) : DZ Digits : 90 Special chars : ~^ Others : 6+nLyZgiY:E/ Password : aeDZ90~^6+nLyZgiY:E/ Final Password : ~EY+ZgaL/e0n9i6:^ZDy Password Length : 20 Chars (Lowercase) : xg Chars (Uppercase) : LW Digits : 60 Special chars : )> Others : PNCo7rT,StSp Password : xgLW60)>PNCo7rT,StSp Final Password : rxoSL>WN)7Sp0CPtT6,g Password Length : 20 Chars (Lowercase) : eo Chars (Uppercase) : OJ Digits : 31 Special chars : ]( Others : Px4C'U{(G~$D Password : eoOJ31](Px4C'U{(G~$D Final Password : 34O(G{J~'x$DUPo(]Ce1 Password Length : 20
Средство проверки пароля Попробуйте это регулярное выражение для проверки безопасного пароля .
Хэширование пароля Не сохраняйте пароль в виде открытого текста. Рекомендуется использовать медленный хэш, такой как Argon2 для хэширования пароля.
Скачать Исходный Код
$клон git $клон git
$cd java-регулярное выражение/пароль
Рекомендации
- Википедия – Надежность пароля
- Индексирование не буквенно-цифровых символов
- Топ-5 Самых Надежных Паролей
- Регулярное выражение Java проверяет примеры паролей
Оригинал: “https://mkyong.com/java/java-password-generator-example/”