为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JAVA中生成一个强制一个特殊字符,一个大写,一个小写的密码?

如何在JAVA中生成一个强制一个特殊字符,一个大写,一个小写的密码?

泛舟湖上清波郎朗 2021-12-10 12:30:00
假设我将输入参数视为int并且我想以字符串形式返回。我怎样才能做到这一点?每次生成密码后,我都需要强制一个特殊字符,一个大写,一个小写。我怎样才能做到这一点?我在下面写了这段代码,我得到了一个解决方案,但它不会每次都在生成的输出中添加大写、小写和特殊字符。public int GeneratePassword(int length) {    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu vwxyz0123456789~`!@#$%^&*()-_=+[{]}\\|;:\'\",<.>/?";    String pwd = RandomStringUtils.random(length , characters );    System.out.println("pwd:="+pwd );    return 0;}
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

这是使用SecureRandom和的一种方法StringBuilder


private static String generateRandomString(int length)

{

    StringBuilder sb = new StringBuilder();

    SecureRandom rnd = new SecureRandom();

    String uppercaseChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    String lowercaseChars = "abcdefghijklmnopqrstuvwxyz";

    String specialChars = "0123456789~`!@#$%^&*()-_=+[{]}\\\\|;:\\'\\\",<.>/?";


    boolean nextIsUppercase = false;

    boolean nextIsLowercase = false;

    boolean nextIsSpecial = true;


    for (int i = 0; i < length; i++) {


        if (nextIsSpecial) {

            sb.append(specialChars.charAt(rnd.nextInt(specialChars.length())));

            nextIsUppercase = true;

            nextIsSpecial = false;

            continue;

        }


        if (nextIsUppercase) {

            sb.append(uppercaseChars.charAt(rnd.nextInt(uppercaseChars.length())));

            nextIsUppercase = false;

            nextIsLowercase = true;

            continue;

        }


        if (nextIsLowercase) {

            sb.append(lowercaseChars.charAt(rnd.nextInt(lowercaseChars.length())));

            nextIsLowercase = false;

            nextIsSpecial = true;

            continue;

        }


    }


    return sb.toString();

}

示例输出:


System.out.println(generateRandomString(1)); -> 7

System.out.println(generateRandomString(2)); -> :Q

System.out.println(generateRandomString(3)); -> 8St

System.out.println(generateRandomString(4)); -> =Lv%

System.out.println(generateRandomString(16)); ->  %Uf-Hs<Ea|Wp;Rt}


查看完整回答
反对 回复 2021-12-10
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

这是您问题的解决方案:


public static String GeneratePassword(int length) {


    String[] characters = {"0123456789","~!@#$%^&*()-_=+[{]}|;:\'\",<.>/?","ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz"};

    Random rand = new Random();

    String password="";

        for(int i=0;i<length;i++) {

            int random = rand.nextInt(4);//choose a number from 0 to 3(inclusive)

            int string_size = characters[random].length();//get length of the selected string

            int random1 = rand.nextInt(string_size);//choose a number from0 to length-1 of selected string

            char item = characters[random].charAt(random1);//selects the character

            password=password+item;//Concatenates with the password

        }

    return password;

}


查看完整回答
反对 回复 2021-12-10
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

何塞马丁内斯已经提供了一个很好的方法来实现这是他方法的代码片段


   public static String getPassword(int length) {

        assert length >= 4;

        char[] password = new char[length];


        //get the requirements out of the way

        password[0] = LOWERCASE[rand.nextInt(LOWERCASE.length)];

        password[1] = UPPERCASE[rand.nextInt(UPPERCASE.length)];

        password[2] = NUMBERS[rand.nextInt(NUMBERS.length)];

        password[3] = SYMBOLS[rand.nextInt(SYMBOLS.length)];


        //populate rest of the password with random chars

        for (int i = 4; i < length; i++) {

            password[i] = ALL_CHARS[rand.nextInt(ALL_CHARS.length)];

        }


        //shuffle it up

        for (int i = 0; i < password.length; i++) {

            int randomPosition = rand.nextInt(password.length);

            char temp = password[i];

            password[i] = password[randomPosition];

            password[randomPosition] = temp;

        }


        return new String(password);

    }


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 237 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号