Android 使用 sqlcipher 加密数据库

本文详细介绍了SQLite支持的五种数据类型:null、integer、float、string和blob,并探讨了数据库加密的重要性,特别是在涉及敏感信息时。文章还介绍了SQLCipher,一种开源的SQLite扩展,提供了256位AES加密,确保数据的安全性。

SQLite 支持的数据类型

sqlite 支持 5 种数据类型

  • null,当某个项未被赋值时,类型为空;赋值后,类型即为建表时为该列指定的类型了。
    但由于SQLite采用的是动态数据类型,会根据存入值自动判断,因此在创建表的时候,字段类型是允许设为null的。但是在首次存入值之后,会根据该值修改实际类型。
    在这里插入图片描述在这里插入图片描述
  • integer,整型(布尔值会被整型,true->1, false->0)
  • float,浮点型
  • string,字符串类型
  • blob,binary large object,是用来存储二进制的大的对象的字段类型(实际中很少用到)

为什么要加密数据库

对于 Root 过的安装手机,可以随意访问 /data/data/<package_name>/databases 目录下的任意文件,在这里就可以查看到数据库中存储的所有数据。对于一般数据没啥问题,但如果涉及到一些账号密码,或者是聊天内容的时候,程序显然就面临着严重的安全漏洞和隐患了,因此这时候,对数据库进行加密就显得尤为重要。

sqlcipher

官网

greendao 支持数据库加密官网:http://greenrobot.org/greendao/documentation/database-encryption/

SQLCipher 官网:https://www.zetetic.net/sqlcipher/

sqlcipher的特性

  • 开源且继承自 sqlite
  • 透明,使用 256位 AES 加密
  • 防篡改设计
  • 跨平台且零配置

依赖

在 Android 上添加 SQLCipher 依赖:https://www.zetetic.net/sqlcipher/sqlcipher-for-android/

在 build.gradle 中的 dependencies 里添加

dependencies {
    //数据库加密
    implementation 'net.zetetic:android-database-sqlcipher:4.2.0'
}

使用方式

sqlcipher 在使用上和 android 自带的数据库并没有什么区别,唯一的区别就是打开的时候,需要提供密码。如果密码传 null,则等价于数据库不加密

引用 sqlcipher 类

import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteException;

打开数据库

sqlcipher 是对整个数据库进行加密,open时进行解密,所以应尽量减少打开的次数。

/**
* 初始化并打开数据库
 * @param context 上下文
 * @param dbName 数据库名称(不用加后缀)
 * @param password 加密数据库密码(密码为null表示不加密)
 */
public void open(Context context, String dbName, String password) {
    this.context = context;
    this.dbName = dbNam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值