📜  Java程序生成N个长度为M的密码(1)

📅  最后修改于: 2023-12-03 14:43:04.189000             🧑  作者: Mango

Java程序生成N个长度为M的密码

在现代社会中,人们需要使用各种密码来保护个人信息的安全。为了避免使用简单或容易猜测的密码,需要使用随机生成的密码。本文将介绍一个使用Java编写的程序来生成指定数量、指定长度的随机密码。

程序思路

程序的生成密码的基本思路如下:

  1. 定义密码长度变量M和生成数量变量N;
  2. 遍历生成N个密码;
  3. 在遍历中,每次生成长度为M的随机字符串;
  4. 判断随机字符串是否符合要求,如果符合则将其作为一个生成密码,否则重新生成;
  5. 所有密码生成完成后,将其打印到控制台。
代码实现
import java.security.SecureRandom;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class PasswordGenerator {

    private static final String LOWER_CASE = "abcdefghijklmnopqrstuvwxyz";
    private static final String UPPER_CASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String NUMBERS = "0123456789";
    private static final String SPECIAL_CHARACTERS = "!@#$%^&*_=+-/";

    private static final String ALL_CHARACTERS = LOWER_CASE + UPPER_CASE + NUMBERS + SPECIAL_CHARACTERS;
    private static final SecureRandom random = new SecureRandom();

    public static Set<String> generatePasswords(int passwordLength, int numberOfPasswords) {
        Set<String> passwords = new HashSet<>();
        while (passwords.size() < numberOfPasswords) {
            StringBuilder password = new StringBuilder();
            for (int i = 0; i < passwordLength; i++) {
                int index = random.nextInt(ALL_CHARACTERS.length());
                password.append(ALL_CHARACTERS.charAt(index));
            }
            if (isValid(password.toString())) {
                passwords.add(password.toString());
            }
        }
        return passwords;
    }

    private static boolean isValid(String password) {
        return password.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$");
    }

    public static void main(String[] args) {
        int passwordLength = 10;
        int numberOfPasswords = 5;
        Set<String> passwords = PasswordGenerator.generatePasswords(passwordLength, numberOfPasswords);
        passwords.forEach(System.out::println);
    }
}
代码解释
  1. 定义了一些字符串常量:小写字母、大写字母、数字、特殊字符以及所有字符;
  2. 使用SecureRandom生成随机数;
  3. 定义一个静态方法generatePasswords,该方法接受两个形参,分别是密码长度和生成数量,该方法返回生成的密码字符串集合;
  4. generatePasswords方法中,使用循环遍历生成指定数量的密码;
  5. 在循环中,使用StringBuilder生成随机字符串,并将其加入到密码字符串集合中;
  6. isValid方法中,使用正则表达式验证生成的随机字符串是否符合密码规则;
  7. 在程序的main方法中调用generatePasswords方法,并打印生成的密码字符串集合。
总结

本文介绍了一个使用Java编写的生成随机密码的程序,程序使用了SecureRandom类生成随机数,并使用了集合来保存生成的密码,使用了正则表达式验证生成的密码是否符合规则。程序可以方便地应用于各种密码生成应用中。