我正在尝试使用 java 创建一个随机 WPA 密码生成器,以尽可能地为我提供安全的 Wifi 密码,可以在我需要时更改。
有没有办法用 WPA(2) 密码中允许使用的所有字符快速填充数组,而不是逐个手动输入字符?
我正在尝试使用 java 创建一个随机 WPA 密码生成器,以尽可能地为我提供安全的 Wifi 密码,可以在我需要时更改。
有没有办法用 WPA(2) 密码中允许使用的所有字符快速填充数组,而不是逐个手动输入字符?
我能想到的最短方法是:
String s = new String(IntStream.rangeClosed(32, 126).toArray(), 0, 95);
char[] ascii = s.toCharArray();
如果您只是生成一个字符序列,则不需要创建一个包含所有 ASCII 字符的数组:
String s = new String(random.ints(length, 32, 127).toArray(), 0, length);
int pwLength = 8;
Random numberGenerator = new Random();
char[] pw = new char[pwLength];
for(int i = 0; i<pwLength; i++){
pw[i] = numberGenerator.nextInt(95) + 32;
}
那么有效 ascii 值的范围是 32-126(参见https://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters)。因此,您可以简单地在每个字符的这些值之间生成一个随机数,然后将 ascii 值转换为字符串。
您执行
Character.toString ((char) i);
或String.valueOf(Character.toChars(int))
将 ascii 值转换为字符串。
将这些字符中的 8-63 个放在一起,您就有了一个随机的 wpa2 密码。
private void buildPassword() {
for (int i = 33; i < 127; i++) {
l.add(i);
}
l.remove(new Integer(34));
l.remove(new Integer(47));
l.remove(new Integer(92));
for (int i = 0; i < 10; i++) {
randInt = l.get(new SecureRandom().nextInt(91));
sb.append((char) randInt);
}
str = sb.toString();
}