随机产生指定位数的字符,包括数字,大写字母,小写字母

增强安全性:生成复杂且敏感字符过滤的密码
本文详细介绍了使用随机数生成器和字符集合来创建长度为8的复杂密码,同时加入敏感字符过滤机制,确保密码不包含特定的敏感字符。通过循环和条件判断,实现对A-Z、a-z、0-9字符集的随机选择,并在生成过程中检查并替换敏感字符,以提高密码的安全性。

public class test2 {
public static void main(String[] args) {

System.out.println(gen(8));
}
public static String gen(int length) {
char[] ss = new char[length];
int[] flag = {0,0,0}; //A-Z, a-z, 0-9
int i=0;
while(flag[0]==0 || flag[1]==0 || flag[2]==0 || i<length) {
   i = i%length;
   int f = (int) (Math.random()*3%3);
   if(f==0)
    ss[i] = (char) ('A'+Math.random()*26);
   else if(f==1)
    ss[i] = (char) ('a'+Math.random()*26);
   else
    ss[i] = (char) ('0'+Math.random()*10);    
   flag[f]=1;
   i++;
}
return new String(ss);
}
}

 

======================================华丽的分界线=============================

按照上面的处理方式,增加敏感字符过滤的处理

 private static void getSelStr(){
  String filterStr = "IiLl1Oo0"; //敏感字符集
  char[] pwd = new char[8];
  int[] flag = {0,0,0}; //A-Z, a-z, 0-9
  int len=0;
  while(flag[0]==0 || flag[1]==0 || flag[2]==0 || len<8) {
      len = len%8;
      int f = (int) (Math.random()*3%3);
      if(f==0){
       pwd[len] = (char) ('A'+Math.random()*26); // A-Z
       while(filterStr.contains(pwd[len]+"")){ //
        System.out.println("-------------------A-Z中敏感字符出现------"+pwd[len]);
        pwd[len] = (char) ('A'+Math.random()*26);
        if(!filterStr.contains(pwd[len]+"")) {System.out.println("-------------------敏感字符替换为------"+pwd[len]); break;}
       }
      }

      else if(f==1){
       pwd[len] = (char) ('a'+Math.random()*26); // a-z
       while(filterStr.contains(pwd[len]+"")){ //
        System.out.println("-------------------a-z中敏感字符出现------"+pwd[len]);
        pwd[len] = (char) ('a'+Math.random()*26);
        if(!filterStr.contains(pwd[len]+"")) {System.out.println("-------------------敏感字符替换为------"+pwd[len]); break;}
       }
      }
      else{
       pwd[len] = (char) ('0'+Math.random()*10); // 0-9
       while(filterStr.contains(pwd[len]+"")){ //
        System.out.println("-------------------0-9中敏感字符出现------"+pwd[len]);
        pwd[len] = (char) ('0'+Math.random()*10);
        if(!filterStr.contains(pwd[len]+"")) {System.out.println("-------------------敏感字符替换为------"+pwd[len]); break;}
       }
      }
      flag[f]=1;
      len++;
   }
    
  
  System.out.println(new String(pwd));
 }

 

 

为了生成一个固定长度的随机密码,其中包含大小写字母数字,可以使用 JDK 17 中的 `SecureRandom` 类来确保生成结果的随机性和安全性。以下是一个实现示例: ```java import java.security.SecureRandom; public class RandomPasswordGenerator { private static final String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz"; private static final String CHAR_UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static final String DIGIT = "0123456789"; private static final String PASSWORD_ALLOW_BASE = CHAR_LOWER + CHAR_UPPER + DIGIT; private static final int PASSWORD_LENGTH = 12; // 密码固定长度 public static void main(String[] args) { SecureRandom random = new SecureRandom(); StringBuilder password = new StringBuilder(PASSWORD_LENGTH); for (int i = 0; i < PASSWORD_LENGTH; i++) { int randomIndex = random.nextInt(PASSWORD_ALLOW_BASE.length()); char randomChar = PASSWORD_ALLOW_BASE.charAt(randomIndex); password.append(randomChar); } System.out.println("Generated Password: " + password.toString()); } } ``` ### 代码说明 1. **字符集定义**:密码字符包括小写字母大写字母数字。这些字符集合在 `CHAR_LOWER`、`CHAR_UPPER` 和 `DIGIT` 中分别定义[^1]。 2. **随机性保障**:通过 `SecureRandom` 类确保生成的密码具有较高的随机性和安全性,避免生成可预测的结果[^1]。 3. **固定长度**:通过循环固定次数(例如 `PASSWORD_LENGTH`)来生成指定长度的密码。 4. **输出结果**:最终生成的密码以字符串形式输出。 ### 可扩展性 如果需要确保密码中至少包含一个大写字母、一个小写字母和一个数字,可以进一步优化逻辑,例如先随机选择每个类型的一个字符,再填充剩余长度,最后打乱顺序以增加不可预测性[^1]。 ### 示例输出 运行上述代码可能会生成类似以下格式的输出: ``` Generated Password: aB3dE9fGhI5j ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值