Android数据存储之SharedPreferences及如何安全存储
2017-02-13 10:35
676 查看
前言:
最近一直在学习Android的数据存储,当学习到SharedPreferences的时候让我回想起了ios的NSUserDefaults,其实这两个真是异曲同工的,实现方式都是通过xml存储的,在ios里叫plist文件,里面都是xml。
什么是SharedPreferences存储?
SharedPreferences是基础key-value(键值对)来存储一些轻量数据的存储方式,特别适用于保存软件配置参数。使用SharedPreferences 保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs。
具体是怎么使用的?
第一个参数是生成xxx.xml文件的文件名字,第二个参数是文件的访问权限以及文件数据写入方式。简单说明一下几种方式:
看到上面的存储数据那么清晰是不是吓坏了!对!你没有看错!存储在文件中就是这样的,纯明文存储没有一点安全性可言~即使设置了Activity.MODE_PRIVATE权限在ROOT权限面前也是不堪一击的。所以我们在使用SharedPreferences的时候尽量不要存储一些有关用户信息的数据比如本文例子中的userId,userPwd等,如果要存储那该怎么补救的呢?我们可以把key
md5一下例如MD5Utils.md5(USER_ID),value 值加密一下,可以采用AES加密 附上一个AndroidAES加密文章(http://www.cnblogs.com/whoislcj/p/5473030.html)。
看了下官方api强烈说明这是一个非常危险的操作。
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
最近一直在学习Android的数据存储,当学习到SharedPreferences的时候让我回想起了ios的NSUserDefaults,其实这两个真是异曲同工的,实现方式都是通过xml存储的,在ios里叫plist文件,里面都是xml。
什么是SharedPreferences存储?
SharedPreferences是基础key-value(键值对)来存储一些轻量数据的存储方式,特别适用于保存软件配置参数。使用SharedPreferences 保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs。
具体是怎么使用的?
1.)写入数据
SharedPreferences sharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); //实例化SharedPreferences.Editor对象 SharedPreferences.Editor editor = sharedPreferences.edit(); //用putString的方法保存数据 editor.putBoolean(USER_ISLOGIN,true); editor.putString(USER_ID, "123456"); editor.putString(USER_PWD, "pwd123"); //提交当前数据 editor.apply();
2.)读取数据
SharedPreferences sharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); String userId=sharedPreferences.getString(USER_ID,""); String userPwd=sharedPreferences.getString(USER_PWD,""); boolean isLogin=sharedPreferences.getBoolean(USER_ISLOGIN,false); Log.e("","userId---->"+userId); Log.e("","userPwd---->"+userPwd); Log.e("","isLogin---->"+isLogin);
3.)监听数据变化
SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { } }; sharedPreferences.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);//注册数据变化监听 sharedPreferences.unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);//解注册数据变化监听
4.)权限控制
SharedPreferences sharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE);
第一个参数是生成xxx.xml文件的文件名字,第二个参数是文件的访问权限以及文件数据写入方式。简单说明一下几种方式:
Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取, Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入; Activity.MODE_APPEND//该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件 可以复合使用例如:
如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
5.)看下具体写入文件的存储结构:
看到上面的存储数据那么清晰是不是吓坏了!对!你没有看错!存储在文件中就是这样的,纯明文存储没有一点安全性可言~即使设置了Activity.MODE_PRIVATE权限在ROOT权限面前也是不堪一击的。所以我们在使用SharedPreferences的时候尽量不要存储一些有关用户信息的数据比如本文例子中的userId,userPwd等,如果要存储那该怎么补救的呢?我们可以把key
md5一下例如MD5Utils.md5(USER_ID),value 值加密一下,可以采用AES加密 附上一个AndroidAES加密文章(http://www.cnblogs.com/whoislcj/p/5473030.html)。
6.)数据共享探讨
Context otherAppContext = createPackageContext("com.gary.appdisplaycontrol", Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedPreferences = otherAppContext.getSharedPreferences("preferences",Context.MODE_WORLD_READABLE|Context.MODE_MULTI_PROCESS);
看了下官方api强烈说明这是一个非常危险的操作。
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
相关文章推荐
- Android数据存储之SharedPreferences及如何安全存储
- Android数据存储之SharedPreferences及如何安全存储
- 大话无线客户端安全之数据存储安全——Android篇
- Android安全-数据安全2-存储安全
- 彩信的在android里是如何存储的 Android MMS模块数据存取
- 从存储、实时、安全的角度谈如何建立完整可用的企业大数据平台
- android-exploitme(五):不安全的数据存储
- Android数据本地安全存储
- 企业如何实现数据安全存储
- Android如何使用文件进行数据存储
- Android如何把json格式的数据存储到xml中
- 彩信的在android里是如何存储的 Android MMS模块数据存取
- Android数据存储 如何搞定SQLite Database
- Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?
- android-exploitme(五):不安全的数据存储
- 数如何避免数据存储安全存在五大灾难?
- android 数据存储安全
- MySQL服务器内部安全数据目录如何访问
- ABAP--如何进行sap的金额数据存储和显示之间的转换(CURRENCY_AMOUNT_DISPLAY_TO_SAP)
- 存储安全与数据恢复基础手册-服务器篇