Passay生成密码而无需重复字符

时间:2019-04-04 04:57:55

标签: java passwords

当前,我正在使用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

我正在使用密码来生成密码

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

1 个答案:

答案 0 :(得分:0)

查看source code,您可以指定一个特定字符的最小数量,但不能指定最大数量。

所以我认为最简单的方法是使用该库生成一个大密码,然后删除重复的字符,然后限制为所需的长度:

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

这可能有点效率低下,所以如果性能至关重要,我建议您编写自己的生成器(我刚刚尝试过,创建一个生成器并不难)。您可以在org.passay.EnglishCharacterData中找到字符集。