正确使用sqlcipher for Android

android-database-sqlcipher是基于SQLCipher的数据库加密框架,支持android4到android9,经常用来对android的SqlLite进行加密,现在支持Gradle集成,如果要支持androidx,可以使用Room框架,也可以配合原声的SQLiteOpenHelper使用。

首先在你的build.gradle中添加依赖:

implementation ‘net.zetetic:android-database-sqlcipher:4.2.0‘  
如果要兼容androidx请参考github页的配合Room框架使用的方案。

这里介绍怎么和原生API配合使用:

1、将所有android.database.sqlite.*的引入全部更改为net.sqlcipher.database.*,例如android.database.sqlite.SQLiteDatabase改为 net.sqlcipher.database.SQLiteDatabase;

2、在你的application的oncreate方法里面调用SQLiteDatabase.loadLibs();传入application的上下文作为参数;

3、在你获取数据库对象的时候,使用SQLiteDatabase.g() ,传入密码,支持String,byte[],char[] 作为密码;

这里有一个guide页作为使用简介https://www.zetetic.net/sqlcipher/sqlcipher-for-android/

下面说一说使用过程中可能出现的问题

  •  SQLiteDatabase mSQLiteDatabase = helper.getWritableDatabase(GlobalConst.DB_PASSWORD);  

虽然guide页是在onCreate里创建的数据库对象,但是实测执行这段代码耗时非常严重,通常情况下为0.8s-1.5s左右,不像使用原生的速度很快不会卡顿,因此建议维系一个全局的单例句柄,可以在应用启动加载页异步加载数据库对象设置为Application全局变量使用或者在每次需要获取db对象的时候都使用异步操作,如果你使用单例模式,要保证每次同时操作数据库的db对象不再同一个线程,因此全部数据操作建议都用异步操作。

  • 密码是对的但是打不开数据,如果你有使用多个类似个继承自DBHelper的对象,加密密钥是一样的也是不能操作的,要么合并这些类,要么把数据库分开

原文地址:https://www.cnblogs.com/yjpjy/p/11359595.html

时间: 2024-10-11 01:04:47

正确使用sqlcipher for Android的相关文章

sqlcipher for android

github 地址 https://github.com/sqlcipher/android-database-sqlcipher 官网教程 https://www.zetetic.net/sqlcipher/sqlcipher-for-android/ 社区版本,在android studio的dependencies中添加 compile 后即可使用,下面的为商业版本(应该需要钱的吧) 使用情况1:http://www.cnblogs.com/begin1949/p/4985883.html

Android数据库安全解决方案,使用SQLCipher进行加解密

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952409 我们都知道,Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作.数据库存储是我们经常会使用到的一种存储方式,相信大多数朋友对它的使用方法都已经比较熟悉了吧.在Android中,我们既可以使用原生的SQL语句来对数据进行操作,也可以使用Android API提供的CRUD方法来对数据库进行操作,两种方式各有特点,选择使用哪

Android ImageView 正确使用姿势

转载来自http://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653578233&idx=1&sn=aea773c1e815fdef910fba28d765940b&chksm=84b3b1feb3c438e8372850a36bdcb87fdfb1ca793793a7c9598bcc792aabbb0f417b7a32c989&mpshare=1&scene=1&srcid=1117pJi4bq

<Android开源库> GreenDAO 用法详解<译文>

简介 greenDAO是一个开源的Android ORM,使SQLite数据库的开发再次变得有趣. 它减轻了开发人员处理底层的数据库需求,同时节省开发时间. SQLite是一个很不错的关系型数据库. 尽管如此,编写SQL和解析查询结果仍然是相当乏味和耗时的任务. greenDAO通过将Java对象映射到数据库表(称为ORM,"对象/关系映射")来解决这些问题. 这样,您可以使用简单的面向对象的API来存储,更新,删除和查询Java对象. 特性 最高性能(可能是Android中最快的OR

sqlite3加密方案sqlcipher,及sqlcipher使用指南

sqlite是一款开源的轻量级数据库,现在android和ios都在使用它来存储结构化数据,但是加密版的并非开源.折中一下只能找开源的解决方案,sqlcipher是一个不错的选择,它可以对sqlite实现加密,并且有在android和ios都有相应的库进行解密读取,只是引入的库会增加app的大小.SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLit

我的Android第三章:Android的组件介绍

小编摘录了Android文档介绍Android四大组件的基本内容,感觉文档的内容写的很详细所以小编将它写入了博客 Android 使用Java语言开发.Android SDK 工具编译代码-以及任意数据并连同相关资源打包进一个Android 包内,它是一个以.apk 为后缀的压缩文件. 一个 .apk 文件中的 所有代码就是一个程序.这个.apk文件就用于在Android设备上安装这个程序. 一旦安装成功,这个Android程序就拥有了自己独立的运行沙盒(沙盒是在受限的安全环境中运行应用程序的一

Android 实践项目开发 总结

  Android 实践项目开发 总结 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________       指导老师:娄嘉鹏          实验日期 :2015.12.06. 实验名称:                   android 百度地图开发 实验目的与要求: 1.实现定位 2.查询公交路线       3.目的地查询 实验目的: 在这次的项目开发中,我做的软件主要功能是调用百度地图的接口,实现定位.查询公交路线 和查

Android 和Java API的一个坑:SimpleDateFormat

今天上班遇到这么一个意料之外的异常: 出问题的代码是这样的(已去除上下文信息): Log.i(LOG_TAG, new SimpleDateFormat("YYYY-MM-dd HH:mm:ss", Locale.CHINA) .format(System.currentTimeMillis())); 反复检查,感觉没有问题,于是新建一个Java Project,直接输出同样的代码: public class Main{ public static void main(String[]

Android API Guides---OpenGL ES

OpenGL ES Android包含高性能2D和3D图形开放图形库(OpenGL?的).详细而言,OpenGL ES的API支持. OpenGL是一个跨平台的图形API.用于指定的3D图形处理硬件标准的软件接口. ES是用于嵌入式设备的OpenGL规范的味道??. Android支持OpenGL ES的API的几个版本号: 的OpenGL ES 1.0和1.1 - 本API规范是由Android 1.0及更高版本号支持. OpenGL ES 2.0的 - 这个API规范由Android 2.2