Android开发推荐的加密框架


浏览:704 次

在项目进行过程中,安全部门突然表示应该对本地数据库进行加密。由于该项目的本地数据库使用ormlite框架,因此在互联网上搜索了许多Android本地数据库加密方法。基本上,SQLCipher开源框架用于加密SQLite数据库。因为项目本身使用ormlite框架,所以不能直接使用。随后,检查了大量相关信息,最终解决了安全要求,特此记录,以备将来使用。

由于SQLCipher框架需要在下面使用,所以让我们先介绍一下:

##SQLCipher简介:

SQLCipher是一个基于SQLite扩展的开源数据库。SQLCipher占地面积小,性能好,因此非常适合嵌入式app和移动开发的数据库保护。

优势:

高加密性能和低开销。只有5-15%的开销用于加密

完全实现数据库的100%加密

采用良好的加密模式(CBC加密模式)

易于使用并实现app级加密

采用OpenSSL加密库提供的算法

##所需的jar包

ormlite-android-encrytion.jar

sqlcipher.jar

番石榴-09.jar

nineoldandroids.jar

##原理分析

事实上,原理很简单。在ormlite的基础上,重写了SQLite数据库getReadableDatabase()方法和getWriteable数据库()方法。即,在读取和写入数据库时添加密钥

公共类SQLiteHelper扩展了OrmLiteSqliteOpenHelper{

public static final String TAG=“SQLiteHelper”;

//数据库版本号

公共静态最终int VERSION=1;

//数据库名称

private static String DB_ NAME=“test.DB”;

//用于读取和写入数据库的密钥

私有静态字符串KEY=“KEY”;

上下文mContext;

公共SQLiteHelper(上下文上下文){

super(context,context.getDatabasePath(DB_NAME)。getPath(),空,

版本、密钥);

mContext=上下文;

}

public void onCreate(SQLiteDatabase arg0,ConnectionSource connSource){

尝试{

TableUtils。createTableIfNotExists(connSource,User.class);

}catch(SQLException e){

//TODO自动生成的捕获块

e、 printStackTrace();

}

}

public void onUpgrade(SQLiteDatabase db,ConnectionSource connSource,

int oldNum,int newNum){

尝试{

TableUtils。dropTable(connectionSource,User.class,true);

}catch(SQLException e){

//TODO自动生成的捕获块

e、 printStackTrace();

}

}

公共空隙关闭(){

super.close();

}

公共SQLiteDatabase getReadableDatabase(){

return getReadableDatabase(KEY);

}

公共SQLiteDatabase getWritableDatabase(){

return getWritableDatabase(KEY);

}

公共同步SQLiteDatabase getReadableDatabase(字符串arg0){

//TODO自动生成的方法存根

return super.getReadableDatabase(arg0);

}

公共同步SQLiteDatabase getWritableDatabase(字符串arg0){

//TODO自动生成的方法存根

return super.getWritableDatabase(arg0);

}

}

到目前为止,Android端基于本地数据库(ormlite)框架的加密已经完成。使用dao、添加或删除与ormlite相同的操作是否非常简单

##基于ormlite数据库框架的批量插入数据(知识点小,但用处大)

/**

*大容量插入

*/

public void insertAllUsers(列出用户){

DatabaseConnection conn=null;

保存点保存点=空;

尝试{

conn=userDao.startThreadConnection();

savepoint=conn.setSavePoint(“bulk_insert”);

for(用户用户:用户){

userDao.create(用户);

}

}catch(SQLException e){

}最后{

如果(conn!=空){

尝试{

conn.commit(保存点);

userDao.endThreadConnection(连接);

}catch(SQLException e){

}

}

}

}

Android端本地数据库的加密应满足安全要求。并非所有项目都需要加密。我希望我的经验能对你有所帮助。

相关资讯:
农产品电子商务向企业个人农产品电子贸易方向发展的效益

农产品电子商务向企业个人农产品电子贸易方向发展的效益

查看
Web 3.0技术的基本方向

Web 3.0技术的基本方向

查看
认知

认知

查看
面向对象的

面向对象的

查看
2018-12-25

2018-12-25

查看