Passay сгенерируйте пароль без повторяющихся символов - PullRequest
0 голосов
/ 04 апреля 2019

В настоящее время я использую passay для генерации случайного пароля.

new PasswordGenerator().generatePassword(8,
  Arrays.asList(
  new CharacterRule( EnglishCharacterData.UpperCase, 2 ),
  new CharacterRule( EnglishCharacterData.LowerCase, 2 ),
  new CharacterRule( EnglishCharacterData.Digit, 2 ),
  new CharacterRule( EnglishCharacterData.Special, 2 ) ) );

Могу ли я узнать, как генерировать случайный пароль без повторения каких-либо символов?

Password: abcxyz12 //valid

Password: abcxyzpa // invalid because a is repeating

Я использую Passay для генерации пароля

<dependency>
  <groupId>org.passay</groupId>
  <artifactId>passay</artifactId>
  <version>1.2.0</version>
</dependency>

1 Ответ

0 голосов
/ 04 апреля 2019

Глядя на исходный код , вы можете указать минимальное количество конкретного символа, но не максимальное.

Так что я думаю, что самым простым способом было бы создать большой пароль с использованием этой библиотеки, а затем удалить повторяющиеся символы, а затем ограничить желаемой длиной:

StringBuilder sb = new StringBuilder();
generatePassword.chars()
        .distinct()
        .limit(8)
        .forEach(c -> sb.append((char) c));
System.out.println(sb.toString());

Это может быть немного неэффективно, поэтому, если производительность критична, я бы предложил написать свой собственный генератор (я только что попробовал, его не сложно создать). Вы можете найти набор символов в org.passay.EnglishCharacterData .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...