我正在开发一个系统应用程序,我将一些敏感数据存储在 EncryptedSharedPreference 中。如果我清除 android Settings 应用程序的数据,我意识到我的应用程序无法按预期工作。发生这种情况是因为如果我尝试获取 EncryptedSharedPreferences 的实例,它会抛出 IOException。当我观察 encrypted_myapp_pref.xml 文件时,我可以看到该文件中存在所有加密值,并且该文件根本没有更改。
我读到 Jetpack Security 有两种类型的密钥 - 主密钥和子密钥:
MasterKey - 加密和解密所有子密钥,主密钥存储在 Android 密钥库中。 子密钥 - 所有用户数据和所有数据 + 子密钥的加密和解密都以加密格式存储在 EncryptedSharedPreferences 本身中。
我的理论是:当我们对设置应用程序进行“清除数据”时,它也会清除 Android Keystore 实例。所有使用sharedUserId="android.uid.system" + EncryptedSharedPreferences
. 但我没有找到任何支持我的理论的文件。
问题陈述:如果我们使用具有共享用户 ID 的系统应用程序并且如果我们清除设置应用程序的数据,在终止我们的应用程序并重新启动或设备重新启动时,我们的应用程序(任何系统应用程序)无法检索 EncryptedSharedPreferences 实例并失败带有 IOException。