Android基于ormlite框架的数据库加密
2017-08-17 00:00
495 查看
#Android基于ormlite框架的数据库加密
项目中期安全突然说本地数据库要进行加密,由于项目的本地数据库是用的ormlite框架,在网上搜了很多Android本地数据库加密的方法基本上都是用的SQLCipher开源框架进行的对SQLite数据库加密,由于项目本身用的是ormlite框架,因此不能直接使用,后来查了很多相关的资料,终于解决了安全的需求,特此记下,以备后用。
由于下面需要用到SQLCipher框架,先介绍一下:
##SQLCipher简介:
SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,SQLCipher具有占地面积小、性能因此它非常适合嵌入式应用的数据库保护,非常适合于移动开发。
优势:
加密性能高、开销小,只要5-15%的开销用于加密
完全做到数据库100%加密
采用良好的加密方式(CBC加密模式)
使用方便,做到应用级别加密
采用OpenSSL加密库提供的算法
##所需jar包
ormlite-android-encryption.jar
sqlcipher.jar
guava-r09.jar
nineoldandroids.jar
##原理分析
其实原理很简单,就是在ormlite的基础上重写了SQLite数据库getReadableDatabase()方法和getWritableDatabase()方法,就是在读数据库和写数据库的时候加上key
到此,Android 端基于本地数据库(ormlite)框架的加密就搞定了,是不是很简单dao的用法和增删该查都跟ormlite操作一样
##基于ormlite数据库框架的批量插入数据(知识点很小,但是用途很大)
Android端的本地数据库加密是应安全需求,并不是所有的项目都需要加密,希望我的经验能够带给你帮助
【总监】十二春秋之,3483099@qq.com;
【Master】zelo,616701261@qq.com;【运营】狼行天下,897221533@qq.com;
【产品设计】流浪猫,364994559@qq.com;【体验设计】兜兜,2435632247@qq.com;
【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
【java】首席工程师MR_W,feixue300@qq.com;【测试】土镜问道,847071279@qq.com;
【数据】喜乐多,42151960@qq.com;【安全】保密,你懂的。
项目中期安全突然说本地数据库要进行加密,由于项目的本地数据库是用的ormlite框架,在网上搜了很多Android本地数据库加密的方法基本上都是用的SQLCipher开源框架进行的对SQLite数据库加密,由于项目本身用的是ormlite框架,因此不能直接使用,后来查了很多相关的资料,终于解决了安全的需求,特此记下,以备后用。
由于下面需要用到SQLCipher框架,先介绍一下:
##SQLCipher简介:
SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,SQLCipher具有占地面积小、性能因此它非常适合嵌入式应用的数据库保护,非常适合于移动开发。
优势:
加密性能高、开销小,只要5-15%的开销用于加密
完全做到数据库100%加密
采用良好的加密方式(CBC加密模式)
使用方便,做到应用级别加密
采用OpenSSL加密库提供的算法
##所需jar包
ormlite-android-encryption.jar
sqlcipher.jar
guava-r09.jar
nineoldandroids.jar
##原理分析
其实原理很简单,就是在ormlite的基础上重写了SQLite数据库getReadableDatabase()方法和getWritableDatabase()方法,就是在读数据库和写数据库的时候加上key
public class SQLiteHelper extends OrmLiteSqliteOpenHelper { public static final String TAG = "SQLiteHelper"; //数据库版本号 public static final int VERSION = 1; //数据库名称 private static String DB_NAME = "test.db"; //读写数据库所用到的key private static String KEY = "key"; Context mContext; public SQLiteHelper(Context context) { super(context, context.getDatabasePath(DB_NAME).getPath(), null, VERSION, KEY); mContext = context; } public void onCreate(SQLiteDatabase arg0, ConnectionSource connSource) { try { TableUtils.createTableIfNotExists(connSource, User.class); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void onUpgrade(SQLiteDatabase db, ConnectionSource connSource, int oldNum, int newNum) { try { TableUtils.dropTable(connectionSource, User.class, true); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void close() { super.close(); } public SQLiteDatabase getReadableDatabase() { return getReadableDatabase(KEY); } public SQLiteDatabase getWritableDatabase() { return getWritableDatabase(KEY); } public synchronized SQLiteDatabase getReadableDatabase(String arg0) { // TODO Auto-generated method stub return super.getReadableDatabase(arg0); } public synchronized SQLiteDatabase getWritableDatabase(String arg0) { // TODO Auto-generated method stub return super.getWritableDatabase(arg0); } }
到此,Android 端基于本地数据库(ormlite)框架的加密就搞定了,是不是很简单dao的用法和增删该查都跟ormlite操作一样
##基于ormlite数据库框架的批量插入数据(知识点很小,但是用途很大)
/** * 批量插入 */ public void insertAllUsers(List<User> users){ DatabaseConnection conn = null; Savepoint savepoint = null; try { conn = userDao.startThreadConnection(); savepoint = conn.setSavePoint("bulk_insert"); for (User user : users) { userDao.create(user); } } catch (SQLException e) { } finally { if (conn != null) { try { conn.commit(savepoint); userDao.endThreadConnection(conn); } catch (SQLException e) { } } } }
Android端的本地数据库加密是应安全需求,并不是所有的项目都需要加密,希望我的经验能够带给你帮助
【总监】十二春秋之,3483099@qq.com;
【Master】zelo,616701261@qq.com;【运营】狼行天下,897221533@qq.com;
【产品设计】流浪猫,364994559@qq.com;【体验设计】兜兜,2435632247@qq.com;
【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
【java】首席工程师MR_W,feixue300@qq.com;【测试】土镜问道,847071279@qq.com;
【数据】喜乐多,42151960@qq.com;【安全】保密,你懂的。
相关文章推荐
- Android基于ormlite框架的数据库加密
- 【Android】在Android上使用OrmLite数据库框架 之 使用表配置文件
- Android 数据库框架ormlite 使用精要
- Android Ormlite数据库框架解析
- Android 数据库框架OrmLite的使用(一)
- Android 数据库框架ormlite 使用精要
- Android数据库框架-----ORMLite关联表的使用
- Android数据库框架-----ORMLite 的基本用法
- Android 数据库—ORMlite 框架详情
- 我的Android之旅(二十四)-------数据库ORMLite框架总结
- Android数据库ORMlite框架翻译系列(第二章:part 2)
- Android数据库ORMlite框架翻译系列(第一章)
- Android数据库框架-----ORMLite关联表的使用
- Android数据库ORMlite框架翻译系列(第一章)
- android Sqlite数据库对象模型ORMLite框架学习
- Android数据库框架-----ORMLite 的基本用法
- android数据库持久化框架, ormlite框架,
- Android数据库ORMlite框架翻译系列(第一章)
- 在android中使用OrmLite数据库框架
- Android ORM数据库之OrmLite使用框架及源码分析