Рубрики
Без рубрики

Пример генератора паролей Java

Безопасный пароль состоит из двух символов нижнего регистра, символов верхнего регистра, двух цифр, двух специальных символов, а остальные дополняются случайными символами.

Автор оригинала: mkyong.

Вот генератор паролей Java для создания безопасного пароля, состоящего из двух символов нижнего регистра, символов верхнего регистра, двух цифр, двух специальных символов, а остальные дополняются случайными символами, пока длина не достигнет 20 символов.

Требования к безопасному паролю:

  1. Пароль должен содержать не менее двух цифр [0-9] .
  2. Пароль должен содержать не менее двух строчных латинских символов [а-я] .
  3. Пароль должен содержать не менее двух прописных латинских символов [А-Я] .
  4. Пароль должен содержать не менее двух специальных символов, таких как ! @ # &() и т.д.
  5. Пароль имеет длину 20 персонажи.

1. Генератор Безопасных Паролей Java

Ниже приведены шаги по созданию безопасного пароля:

  1. Определены все поддерживаемые символы.
  2. Получить случайные два символа из списка символов нижнего регистра [а-я] .
  3. Получить случайные два символа из списка символов верхнего регистра [А-Я] .
  4. Получить случайные два символа из списка цифр [0-9] .
  5. Получите случайные два символа из списка специальных символов [!@#&...] .
  6. Получите еще один случайный 12 символы из списка поддерживаемых символов (строчные, прописные, цифры и специальные символы).
  7. Объедините все вышеперечисленное 20 случайные символы.
  8. Перетасуйте результат в шаге 7 , чтобы создать случайный порядок.
  9. Это последний безопасный пароль.
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) {
        List result = 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-регулярное выражение/пароль

Рекомендации

Оригинал: “https://mkyong.com/java/java-password-generator-example/”