将密码存储在EncryptedSharedPreferences中是否安全?
这个问题要分场景判断,没有绝对的“安全”或“不安全”,可以参考以下结论:
- 普通非root设备的常规业务场景下,安全性足够。
EncryptedSharedPreferences是Android官方推出的加密存储方案,默认使用AES-256-GCM算法加密键和值,加密密钥默认存储在系统Keystore中,不会随应用打包导出,也无法被其他应用读取。相比明文存储的普通SharedPreferences,它可以有效防止反编译、应用私有目录文件泄露导致的敏感信息明文泄漏,用来存普通的登录令牌、用户设置类敏感信息完全够用。 - 高危场景下无法做到100%安全。
如果用户设备已经被root,攻击者拿到了系统最高权限,既可以直接访问你应用私有目录下的加密SP文件,也有手段导出Keystore中存储的加密密钥,完全可以解密得到明文内容。另外如果你的应用本身存在注入漏洞、内存dump漏洞,就算加密存储,数据在运行时解密后也可能被从内存中窃取。
实用建议:如果不是必要场景,尽量不要在本地存储用户的原始明文密码,优先选择存储后端下发的有效期较短的访问令牌,降低信息泄漏后的危害。如果是支付密码等高敏感信息,不要存在本地,每次使用时让用户实时输入是最稳妥的方案。
内容的提问来源于stack exchange,提问作者zzz
相关产品推荐
相关产品推荐

