0

我正在尝试使用 java 创建一个随机 WPA 密码生成器,以尽可能地为我提供安全的 Wifi 密码,可以在我需要时更改。

有没有办法用 WPA(2) 密码中允许使用的所有字符快速填充数组,而不是逐个手动输入字符?

4

4 回答 4

4

我能想到的最短方法是:

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);
于 2015-09-03T20:33:49.920 回答
3
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;
}
于 2015-09-03T20:29:18.370 回答
1

那么有效 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 密码。

于 2015-09-03T20:06:39.150 回答
0
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();
    }
于 2015-09-30T09:43:58.007 回答