【发布时间】:2015-11-29 19:25:59
【问题描述】:
我正在尝试使用 java 创建一个随机 WPA 密码生成器,以尽可能地为我提供安全的 Wifi 密码,可以在我需要时更改。
有没有一种方法可以使用 WPA(2) 密码中允许使用的所有字符快速填充数组,而不是手动逐个输入字符?
【问题讨论】:
标签: java auto-populate wpa
我正在尝试使用 java 创建一个随机 WPA 密码生成器,以尽可能地为我提供安全的 Wifi 密码,可以在我需要时更改。
有没有一种方法可以使用 WPA(2) 密码中允许使用的所有字符快速填充数组,而不是手动逐个输入字符?
【问题讨论】:
标签: java auto-populate wpa
我能想到的最短方法是:
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();
}
【讨论】: