`
573842281
  • 浏览: 43894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java生成随机密码串的两种方法

阅读更多
群里有朋友提出的问题:

功能
生成随机密码串;
要求
密码串类型可以是纯数字,纯字符,或混合数字、字符和其他符号。
密码串类型和密码串长度在运行时指定。
生成密码串的个数在运行时指定。

看到群里没人贴完整功能的代码,可能是对此题不屑一顾,于是自己就帮忙写了。(初学者可以参考下)

/*
* assignType方法控制密码串的类型,str存放的是密码串中可能存在的字符
*/

package com.yby;


public class StrType {

public static String assignType(int type){
 
 
   String str="";
   while(true){
    switch(type){
    case 1:
     for(int i=0;i<=9;i++){ //纯数字
      str=str+i;
     }
     return str;
    case 2:
     for(int i=33;i<127;i++){
      if(i<58&&i>47){   //排除数字
       continue;
      }
    
      str=(char)i+str;
      System.out.println(str);
     }
     return str;
    case 3:
     for(int i=33;i<127;i++){ //数字和字符混合
      str=(char)i+str;
     }
     return str;
     default:
      System.out.println("输入错误,程序退出!");
      System.exit(1);
    }
  
   }
 
}
}

=========================================

/*
* 得到密码串
*/

package com.yby;

import java.util.Random;

public class GetPwd {

public static String getpass(String str, int length) {
   String pwd = "";
   Random rand = new Random();
   char[] chr = str.toCharArray();

   for (int i = 0; i < length; i++) { // 控制密码的长度
    int j = rand.nextInt(chr.length); // 随机产生字符数组下标
    pwd = pwd + chr[j];
   }
   return pwd;
}
}
=========================================

/*
* 得到密码串数组
*/

package com.yby;


public class StrPwd {
public static String[] strPwd(String str, int length,int num){
 
 
   String[] strpwd= new String[num];
   for(int i=0;i<num;i++){
    String pwd=GetPwd.getpass(str, length);
    strpwd[i]=pwd;
   }
 
   return strpwd;
}
}

=========================================
/*
* 打印产生的密码串
*/

package com.yby;

public class printPwd {
public static void printpass(String[] pwd){
   for(int i=0;i<pwd.length;i++){
    System.out.println(pwd[i]);
   }
}
}
=========================================

/*
* 测试类
*/
package com.yby.test;

import java.util.Scanner;

import com.yby.GetPwd;
import com.yby.StrPwd;
import com.yby.StrType;
import com.yby.printPwd;

public class Test {

public static void main(String[] args) {
   Scanner output = new Scanner(System.in);
   System.out.println("请输入密码串的类型(1.纯数字 2.纯字符    3.混合数字、字符和其他符号)");
   int type = output.nextInt();
   String str = StrType.assignType(type);
   System.out.println("请输入密码长度:");
   int length = output.nextInt();
   String pwd = GetPwd.getpass(str, length);
   System.out.println("请输入要产生的密码串个数:");
   int num = output.nextInt();
   String strpwd[] = StrPwd.strPwd(pwd, length, num);
   // 打印
   printPwd.printpass(strpwd);
 
}

}

另外一种方法:

就是把需要的字符全部放在一个字符数组中,再在字符数组中随机取出字符组成密码串。此方法的好处就是想要什么特殊字符,自己添加,后面的代码作只需少许改动。

/*自己写测试类测试下

package test;

import java.util.Random;

public class Getpass {

   private static char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7',
     '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
     'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
     'y', 'z', 'A', 'B','C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
     'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
     'Z','!','@','#','$','%','^','&','*','~','|'};    //72个字符集

   /**
   *
   * @param passLength
   *            随机密码长度
   * @param count
   *            随机密码个数
   * @return 随机密码数组
   */
   public static String[] getPasswords(int type,int passLength, int count) {
    String[] passwords = new String[count];// 新建一个长度为指定需要密码个数的字符串数组
    Random random = new Random();
    if(type==1){
     for (int i = 0; i < count; i++) {// 外循环 从0开始为密码数组赋值 也就是开始一个一个的生成密码
      StringBuilder password = new StringBuilder("");// 保存生成密码的变量
      for (int m = 1; m <= passLength; m++) {// 内循环 从1开始到密码长度 正式开始生成密码
       password.append(chars[random.nextInt(10)]);// 为密码变量随机增加上面字符中的一个
      }
      passwords[i] = password.toString();// 将生成出来的密码赋值给密码数组
     }
    }
    else if(type==2){
     for (int i = 0; i < count; i++) {// 外循环 从0开始为密码数组赋值 也就是开始一个一个的生成密码
      StringBuilder password = new StringBuilder("");// 保存生成密码的变量
      for (int m = 1; m <= passLength; m++) {// 内循环 从1开始到密码长度 正式开始生成密码
       password.append(chars[random.nextInt(53)+10]);// 为密码变量随机增加上面字符中的一个
      }
      passwords[i] = password.toString();// 将生成出来的密码赋值给密码数组
     }
    }
    else if(type==3){
     for (int i = 0; i < count; i++) {// 外循环 从0开始为密码数组赋值 也就是开始一个一个的生成密码
      StringBuilder password = new StringBuilder("");// 保存生成密码的变量
      for (int m = 1; m <= passLength; m++) {// 内循环 从1开始到密码长度 正式开始生成密码
       password.append(chars[random.nextInt(72)]);// 为密码变量随机增加上面字符中的一个
      }
      passwords[i] = password.toString();// 将生成出来的密码赋值给密码数组
     }
    }
    else{
     System.out.println("输入错误!");
    }
  
    return passwords;
   }

}
重复的代码最好建一个类,要不然看着就刺眼。
分享到:
评论

相关推荐

    java生成随机字符串的两种方法

    Java生成随机字符串的两种方法 Java生成随机字符串是 Java 中一个常见的应用场景,例如在注册用户时生成验证码、生成订单号、生成唯一标识符等。今天我们将为大家详细介绍 Java 生成随机字符串的两种方法。 方法一...

    java生成md5密码加盐

    在IT行业中,安全是至关重要的,特别...总的来说,Java和SpringBoot结合加盐MD5提供了一种相对安全的密码存储方案,可以有效抵御彩虹表攻击。然而,考虑到MD5的安全性,现在更推荐使用如bcrypt或Argon2等现代哈希算法。

    Java根据正则表达式生成字符串—Xeger,automaton

    在本篇文章中,我们将深入探讨如何利用Java中的Xeger和automaton库来根据正则表达式生成随机字符串。 首先,我们要了解什么是正则表达式。正则表达式,也被称为regex,是由字符、特殊符号组成的模式,用于匹配一...

    java生成随机加减法的图形验证码

    总的来说,Java生成随机加减法图形验证码的过程涉及了随机数生成、数学运算、图像处理和网络交互等多个技术点,这需要开发者对Java基础、图形编程以及Web服务有深入的理解。通过这种方式,我们可以创建出安全且用户...

    java随机生成十六进制颜色

    2. **使用`Random`类**:通过`Random`类的`nextInt()`方法生成随机整数,再将这些整数转换成十六进制字符串。 #### 三、具体实现 根据题目描述,我们有两种实现方式。下面分别介绍这两种方法的具体实现细节。 ###...

    Java生成含字母和数字的6位随机字符串

    标题提到的"Java生成含字母和数字的6位随机字符串",就是指通过编程方式创建一个长度为6的字符串,其中包含大小写字母和数字的组合。下面我们将深入探讨如何实现这个功能。 首先,我们需要了解Java中生成随机数的...

    java随机生成10位数的字符串ID

    下面是Java随机生成10位数字符串ID的方法,使用了MathUtils和IdUtils两个工具类。 首先,我们需要创建一个MathUtils工具类,用于生成随机数字字符串: ```java public class MathUtils { private static final ...

    java随机生成字符串(字符随机生成类 生成随机字符组合)

    在Java编程语言中,生成随机字符串是一项常见的任务,特别是在创建密码、唯一标识符或测试数据时。本示例代码提供了一个名为`PassWord`的类,该类包含了一个枚举`TYPE`,用于定义不同类型的随机字符组合。下面将详细...

    java随机产生四位验证码(相邻码不重复)两种算法实现

    在Java编程中,生成验证码是一种常见的需求,通常用于身份验证或防止机器人自动操作。验证码的目的是确保用户是人类,而不是机器。在这个问题中,我们关注的是如何生成四位字符且无重复的验证码,以及如何进一步确保...

    开发常用游戏昵称 java 随机

    开发者可以通过Java代码来读取和使用这个昵称库,例如创建一个随机昵称生成器,每当新用户注册时,就从这个库中随机选取一个昵称,或者根据用户的特定喜好进行筛选和推荐。 总的来说,这个“开发常用游戏昵称 java ...

    java生成十个不重复的随机数

    在Java编程中,生成十个不...以上就是使用Java生成十个不重复随机数的两种主要方法。无论选择哪种方式,都需要根据具体需求和性能要求进行权衡。在实际开发中,理解这些算法背后的逻辑和可能的优化方向是至关重要的。

    java生成随机图片验证码

    Java生成随机图片验证码的实现可以分为前台和后台两个部分。前台部分主要负责生成验证码的HTML代码,而后台部分负责生成验证码图片并返回给前台。 前台HTML代码如下: ```html ;"&gt; 验证码: ;height: 25px;"/&gt; ...

    【JavaScript源代码】Java 生成随机字符的示例代码.docx

    接下来,代码示例中还提供了另外两种生成随机字符串的方法: 4. 混合字母和数字的随机字符串 ```java public static String getRandomString(int length){ String str=...

    java生成图片验证码

    1. **生成随机字符串**:首先,我们需要生成一个随机的字符串,长度通常为4到6位,包含大小写字母和/或数字。可以使用`java.util.Random`和`Character`类来实现。 2. **创建图像**:使用`java.awt.image....

    Java生成随机时间的简单随机算法

    总结,Java生成随机时间的简单随机算法通常包括选取起始和结束时间,然后生成一个在该范围内的随机长整数(代表毫秒值),最后将其转换为日期对象。可以使用 `Math.random()`,也可以使用更为高效的 `java.util....

    java 二维数组 随机生成迷宫

    生成迷宫的过程通常分为两个主要步骤:分割和随机选择路径。 1. **分割**:初始化一个完全连通的二维数组,即所有相邻的节点之间都有路径。这可以通过将数组的所有水平和垂直边标记为“墙”来实现,而交叉点则代表...

    MacAddress.zip_JAVA随机MAC_former7fp_java MacAddress_java生成mac

    总的来说,`MacAddress.java`文件提供了一种在Java环境中生成随机MAC地址的方法,这对于网络编程、测试场景或者模拟网络环境等方面具有实用价值。通过学习和理解这段代码,我们可以深入掌握Java的随机数生成、字符串...

    java随机产生验证码

    总结来说,Java生成随机验证码的过程主要包括以下步骤: 1. 定义图像尺寸和类型。 2. 生成随机颜色作为背景色。 3. 设置字体样式和颜色。 4. 随机生成验证码内容,并将其绘制到图像上。 5. 将图像保存为指定格式的...

    java随机字符串生成示例

    在Java编程中,生成随机字符串是一项常见的任务,可用于创建安全密码、唯一标识符或测试数据。本示例介绍了一个名为`PassWord`的类,它提供了生成不同类型的随机字符串的功能。下面将详细解释该类的工作原理及如何...

    java随机生成验证码

    以下是一个简单的Java验证码生成的实现,包括了四个随机数字和杂乱背景的图片生成过程: 1. **设置页面类型和导入必要的库**: - 使用`@page`指令设置页面内容类型为`image/jpeg`,表明这是一个图片响应。 - 导入...

Global site tag (gtag.js) - Google Analytics