0

我正在生成一个随机密码。我的密码长度为 8 个字符,其中包含特殊字符。我需要保留first letter as alphabet并且需要对剩余的七个字符进行洗牌,使其成为mixture of alphanumeric + ascii characters.

public String generatePassword() {
        int passwordLength = MAX_PASSWORD_LENGTH;
        StringBuffer password = new StringBuffer(passwordLength);
        //first character as an alphabet
        password.append(RandomStringUtils.randomAlphabetic(1)).toString();
        String alphaNumeric = RandomStringUtils.random(5, true, true);
        String asciiChars = RandomStringUtils.randomAscii(2);
        password.append(alphaNumeric).append(asciiChars);
        return password.toString();
    }

我需要一些帮助来随机播放最后 7 个字符。怎么做?

4

2 回答 2

1

Java Collections API 有一个内置的 shuffle 方法,您可以使用:请参阅此处。基本上,您需要List从最后 7 个字符中创建一个,并将其传递给Collections.shuffle.

于 2012-08-13T07:47:00.850 回答
0

如果您没有那么严格的要求,那么您可以随机附加字符:

Random random = new Random();
for (int i = 0; i < 7; i++) {
   if (random.nextBoolean()) {
       password.append(RandomStringUtils.random(1, true, true));
   } else {
       password.append(RandomStringUtils.randomAscii(1));
   }
}

如果您需要保证每种至少有一个,那么您可以添加一个简单的测试:

boolean hasAlphaNumeric = false;
boolean hasAscii = false;
while (hasAlphaNumeric == false || hasAscii == false) {
  Random random = new Random();
  for (int i = 0; i < 7; i++) {
    if (random.nextBoolean()) {
      password.append(RandomStringUtils.random(1, true, true));
      hasAlphaNumeric = true;
    } else {
      password.append(RandomStringUtils.randomAscii(1));
      hasAscii = true;
    }
  }
}
于 2012-08-13T07:59:38.783 回答