升级.NET 8 MAUI至8.0.82后Android端启动报Javax.Crypto.AEADBadTagException
修复.NET 8 MAUI 8.0.82 Android设备上的Javax.Crypto.AEADBadTagException异常
这个异常源于MAUI Essentials的SecureStorage组件升级后,加密机制变更导致旧的加密存储数据无法解密。以下是几种可行的修复方案:
方案1:彻底清除旧应用数据(快速解决)
- 卸载设备上的目标应用
- 进入设备应用管理,找到已卸载应用的残留记录(部分设备会保留缓存数据),手动清除其缓存和数据
- 重启设备后重新部署应用
方案2:代码层面自动处理异常
在访问SecureStorage的代码中添加异常捕获,触发解密失败时自动清除旧存储数据,再重新初始化:
try { var storedValue = await SecureStorage.GetAsync("your_key"); } catch (Javax.Crypto.AEADBadTagException) { // 清除所有旧的SecureStorage数据 SecureStorage.RemoveAll(); // 重新尝试操作 var storedValue = await SecureStorage.GetAsync("your_key"); }
这种方式无需用户手动卸载应用,首次启动时即可自动修复问题。
方案3:正确配置备份排除规则(预防后续问题)
若需保留自动备份功能,确保在auto_backup_rules.xml中排除SecureStorage的存储文件,避免备份旧的加密数据:
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- 排除SecureStorage对应的共享偏好文件 --> <exclude domain="sharedpref" path="maui_security_storage.xml"/> </full-backup-content>
同时在AndroidManifest.xml中配置备份规则引用:
<application ... android:fullBackupContent="@xml/auto_backup_rules">
方案4:数据迁移(需保留旧数据时)
如果需要保留原有SecureStorage数据,需在升级前做过渡处理:
- 在旧版本MAUI应用中,读取所有SecureStorage数据并临时存储到非加密位置(比如SharedPreferences或本地文件)
- 升级应用到8.0.82版本后,将临时存储的数据重新写入新的SecureStorage
- 删除临时存储的数据
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

