首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java.lang.IllegalArgumentException: passphrase not ASCII encodable

java.lang.IllegalArgumentException: passphrase not ASCII encodable

原创
作者头像
薇芯公重号 AI创造财富
发布2025-07-15 13:46:53
发布2025-07-15 13:46:53
2350
举报

E FATAL EXCEPTION: main

Process: com.kte.getwifipwd, PID: 5917

java.lang.IllegalArgumentException: passphrase not ASCII encodable

at android.net.wifi.WifiNetworkSpecifier$Builder.setWpa2Passphrase(WifiNetworkSpecifier.java:306)

at com.kte.getwifipwd.WifiPasswordActivity.connectWithNetworkSpecifier(WifiPasswordActivity.java:99)

at com.kte.getwifipwd.WifiPasswordActivity.lambda$startBruteForce$0$com-kte-getwifipwd-WifiPasswordActivity(WifiPasswordActivity.java:161)

at com.kte.getwifipwd.WifiPasswordActivity$$ExternalSyntheticLambda0.run(Unknown Source:8)

at android.os.Handler.handleCallback(Handler.java:958)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loopOnce(Looper.java:205)

at android.os.Looper.loop(Looper.java:294)

at android.app.ActivityThread.main(ActivityThread.java:8225)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:573)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1058)

你遇到的错误是:

代码语言:javascript
复制
java.lang.IllegalArgumentException: passphrase not ASCII encodable

这个报错来自:

代码语言:javascript
复制
WifiNetworkSpecifier.Builder.setWpa2Passphrase(String passphrase)

🚨 错误原因

该异常的意思是:

你尝试连接 Wi-Fi 的密码 password包含了非 ASCII 字符,比如中文、表情符号、全角字符等。

根据 Android 的规范,setWpa2Passphrase() 要求:

  • WPA2 密码必须是 8 到 63 个字符
  • 每个字符必须是标准 ASCII(0x20 ~ 0x7E)
  • 不支持中文、表情、特殊 Unicode 字符

✅ 解决方案

✅ 方法一:过滤掉非 ASCII 字符的密码

你可以在调用 connectWithNetworkSpecifier() 前过滤密码:

代码语言:javascript
复制
private boolean isAscii(String password) {
    return password.chars().allMatch(c -> c >= 32 && c <= 126);
}

然后在尝试连接前判断:

代码语言:javascript
复制
if (!isAscii(password) || password.length() < 8 || password.length() > 63) {
    Log.w("BruteForce", "跳过非法密码: " + password);
    currentPasswordIndex++;
    return;
}

✅ 方法二:从 passwordList 中预处理过滤

启动前过滤掉所有非法密码:

代码语言:javascript
复制
passwordList = passwordList.stream()
        .filter(pwd -> pwd.length() >= 8 && pwd.length() <= 63)
        .filter(this::isAscii)
        .collect(Collectors.toList());

💡 小建议:添加异常捕获避免程序崩溃

哪怕你过滤了,也建议为安全再包一层 try-catch

代码语言:javascript
复制
try {
    connectWithNetworkSpecifier(targetSsid, password);
} catch (IllegalArgumentException e) {
    Log.e("BruteForce", "非法密码: " + password + ",跳过", e);
}

✅ 最终效果

这样你就不会再看到:

代码语言:javascript
复制
java.lang.IllegalArgumentException: passphrase not ASCII encodable

而且你的暴力破解流程也更健壮、可控,不会因为一个中文密码崩掉整个线程。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚨 错误原因
  • ✅ 解决方案
    • ✅ 方法一:过滤掉非 ASCII 字符的密码
    • ✅ 方法二:从 passwordList 中预处理过滤
  • 💡 小建议:添加异常捕获避免程序崩溃
  • ✅ 最终效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档