我编写了以下代码来创建两个共享首选项文件: 正常商家的SETTINGS_NAME和OAUTH_NAME 隐藏oauth消费者密钥,秘密和访问令牌。 [我在stackOverflow上多次阅读这是隐藏它们的最好方法,虽然不是很好。]
protected void onStart() {
super.onStart();
sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null);
sharedPreferencesOauth = getSharedPreferences(Constants.OAUTH_NAME, Context.MODE_PRIVATE);
}
但文件OAUTH_NAME根本不是私有的!
它可能无法通过其他应用程序以编程方式读取, 但是在root设备上,它可以在ES文件资源管理器中打开和检查; 它位于/data/data/{packageName}/share_prefs/SHARED_PREFS_OAUTH_NAME.xml。
对黑客来说当然不是一个挑战。
另一方面,文件SETTINGS_NAME似乎确实更私密 它不在文件夹/ data / data / {packageName} / share_prefs /。
中我的问题:为什么文件SETTINGS_NAME不在文件夹... / shared_prefs中而文件OAUTH_NAME - 也创建了MODE_PRIVATE - 在文件夹... / shared_prefs中?
答案 0 :(得分:1)
私人设置保存在应用程序的私人目录中。
在root设备上,没有什么是私密的。这就像离开你家的大门一样,想知道你怎么能安全地对付一个小偷。
将文件保存在更隐蔽的位置并不能提供太多安全性,因为任何人都可以转储.apk,对其进行反编译并找到该文件的保存位置。在root用户手机上保存安全数据的唯一方法是使用加密而不存储密码。
答案 1 :(得分:0)
您正在Root设备上运行吗?
一旦生根,即使是系统文件也可以访问所有内容。所以MODE_PRIVATE正在这种情况下工作。
您可以通过任何资源管理器应用访问它们。现在无法保护您的文件!!!