Android數據存儲之SharedPreferences及如何安全存儲


前言:

    最近一直在學習ios的數據存儲,當學習到NSUserDefaults的時候讓我回想起了SharedPreferences,今天閑來無事,想着總結一下SharedPreferences的使用。

什么是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強烈說明這是一個非常危險的操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM