shuffle(随机重新排列)随机生成的密码

时间:2012-08-13 07:42:09

标签: java random passwords

我正在生成随机密码。我的密码长度为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个字符。怎么做?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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;
    }
  }
}