副问题[/!--empirenews.page--]
【新产物上线啦】51CTO播客,随时随地,碎片化进修
一、数据存储安详
Android操纵体系自问世以来依附其开放性和易用性成为当前智妙手机的主流操纵体系之一,作为与人们相关最亲近的智能装备,越来越多的通信录、短信、视频等隐私数据以明文的方法生涯在手机中,这些数据固然有锁屏暗码可能指纹掩护,可是因为Android体系自身的安详性,专业人士可以绝不艰辛的获取得手机数据镜像,小我私人隐私面对泄漏风险。另一方面,日益繁荣的移动互联网应用也是基于用户数据和应用措施组成,怎样掩护这些用户数据安详性是应用成长的基石。跟着人们对数据安详重视,怎样更好地掩护用户数据成为移动应用开拓者的一大挑衅。
本文以Android开拓实践出发,由浅入深接头Android数据的存储、加密等实现要领供移动开拓举办参考。并团结自身履历切磋对Android数据安详的一些思索。

二、常用数据存储要领及实例
1. 文件
存储数据最直接的要领就是以文件的情势生涯在手机中,Android开拓首要基于Java说话,因此,在文件读写等根基操纵沟通,文件操纵和数据流来历于java.IO.*,可是对付Android而言,开拓者必要留意一下几点:
(1) 文件目次 Android权限打点中各个应用措施有独立的存储空间,存储布局如下:

(2) 常见文件目次及路径
- /data/data/(packageName)/cache目次 应用缓存文件,目次获取要领:File cache = getCacheDir()
- /data/data/(packageName)/files目次,即应用一样平常文件,目次获取要领:File file = getFilesDir()
- /data/data/(packageName)/shared_prefs目次,存放应用SharedPreference文件目次位置
- /data/data/(packageName)/databases目次,应用数据库目次(SQLite)
- /storage/emulated/0/sdcard内置sd卡目次,获取要领:String sdcard = getInnerSDCardPath()
- /storage/extSdCard外置sd卡目次,获取要领:String exsdcard = Environment.getExternalStorageDirectory().getPath()
在Android手机中,获取默认sd卡目次要领明晰,可是因为Android手机自己不必然支持外置sd卡,可能有/没有插入外置sd卡,因此在获取外sd卡时必要把稳有坑,一是停止非常,二是分清内置和外置。
要害:位置。通过文件生涯用户可能应用数据时,起主要遵循Android开拓的法则,在应用目次中按照文件的范例选择生涯的外置。在sd卡中存放时,停止直接生涯在根目次下,这样做是停止造成用户手机文件打点的紊乱;二是停止文件被修改、删除等。
2. 数据库
Android 数据库回收SQLite,SQLite 是一款内置到移动设惫亓?轻量型的数据库,是遵守ACID(原子性、同等性、断绝性、耐久性)的关联式数据库打点体系。Android开拓中可以通过SQLiteOpenHelper可能自界说类SQLiteOpenHelper来实现数据存储查询修改的成果。另外SQLite数据库支持加密操纵,通过sqlite3.exe可能SQLiteConnection均可对数据库举办加密操纵。SQLiteEncrypt、SQLiteCrypt、SQLCipher等器材提供对数据库的加密操纵,可是前两个必要收费,SQLCipher是开源器材,GitHub地点为: SQLCipher;通过SQLiteConnection类加密要领如下:
- SQLiteConnection conn = new SQLiteConnection("Data Source=TestDatabase.sqlite;Version=3;"); conn.SetPassword("password"); conn.open();
3. SharedPreferences存储
SharedPreferences存储方法是Android中存储轻量级数据的一种方法,内部以Map方法举办存储,生涯的数据以xml名目存放在当地的/data/data/(packagename)/shared_prefs文件夹下。SharedPreference
- SharedPreferences pref = getSharedPreferences("test", MODE_PRIVATE); SharedPreferences.Editor editor=pref.edit(); SharedPreferences.Editor editor=pref.edit();editor.putString("name", "root");//生涯字符串 editor.putInt("age", 12);//生涯整型数据 editor.commit(); //putXXX 要领中第一个参数是key,第二参数为value
- SharedPreferences pref = getSharedPreferences(“setting”, 0);
- pref.getInt("key_name", -1); // getting Integer pref.getFloat("key_name", null); // getting Float pref.getLong("key_name", null); // getting Long //getXXX要领第一个参数暗示key名称,第二个暗示value默认值
三、Android加密算法及实现
DES,对称加密,同理有3DES,3DES在DES的基本长举办3重加密,以捐躯服从来进步加密安详性。
- //DES加密[] encrypt([] data,String key){
- {
- [] bkey = key.getBytes();
- // 初始化向量IvParameterSpec iv = IvParameterSpec(bkey);
- DESKeySpec desKey = DESKeySpec(bkey);
- // 建设密匙工场,把DESKeySpec转换成securekey
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance();
- SecretKey securekey = keyFactory.generateSecret(desKey);
- Cipher cipher = Cipher.getInstance();
- // 用密匙初始化Cipher工具cipher.init(Cipher., securekey, iv);
- // 此刻,获取数据并加密
- // 加密操纵cipher.doFinal(data);
- } (Throwable e) {
- e.printStackTrace();
- }
- ;
- }
- //DES解密[] decrypt([] src, String key) Exception {
- [] bkey = key.getBytes();
- // 初始化向量IvParameterSpec iv = IvParameterSpec(bkey);
- // 建设一个DESKeySpec工具DESKeySpec desKey = DESKeySpec(bkey);
- // 建设密匙工场SecretKeyFactory keyFactory = SecretKeyFactory.getInstance();
- // 把DESKeySpec工具转换成SecretKey工具SecretKey securekey = keyFactory.generateSecret(desKey);
- // Cipher工具现实完成解密操纵Cipher cipher = Cipher.getInstance();
- // 用密匙初始化Cipher工具cipher.init(Cipher., securekey, iv);
- // 真正开始解密操纵cipher.doFinal(src);
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|