sqlite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS、Android)。然而免费版的SQLite有一个致命缺点:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。
如果我们想要使得自己的数据库加密,解决方案就是使用另一款开源的加密数据库SQLCipher,SQLCipher使用256-bit AES加密,由于其基于免费版的SQLite,主要的加密接口和SQLite是相同的,当然也增加了一些自己的接口,如在新建和打开数据库时,给数据库设置秘钥之类的操作。
FMDB是一个开源的类库,它对sqlite数据库操作进行了很不错的封装,而且也增加了对sqlcipher的支持,也就是说,我们不直接用sqlcihper也能完成加解密操作,而且FMDB在操作sqlite方面方便得多。现在的APP开发如果涉及到数据库操作,FMDB基本上是首选。
下面内容主要是针对一些在初期忽略了数据库私密性,而到了中期需要让数据库进行升级加密的App的简单方案介绍和代码实现。如果读者没有使用FMDB,直接使用了sqlite,那本文也有一定参考性,只是关于SQLCipher的配置,并没有介绍,因为虽然FDMB的加密也是使用SQLCipher,但是不需要进行配置的。
具有加密功能的FMDB版本
加密的FMDB其实是一个分支,也就是说,如果你需要替换FMDB。GitHub上关于该分支的安装只提供了cocospod的安装方式。
github上FMDB的地址:https://github.com/ccgus/fmdb
举个例子,如果你以前是如下写的
1
--结束END--
本文标题: 关于SQLite,SQLCipher和FMDB
本文链接: https://lsjlt.com/news/50817.html(转载时请注明来源链接)
有问题或投稿请发送至:
邮箱/279061341@qq.com QQ/279061341
-
SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS、Android)。然而免费版的SQLite...
-
目录正文效果图什么是数据库iOS中的数据存储方式什么是SQLiteSQL语句的种类数据定义语句(DDL:Data Definition Language)数据操作语句(DML:Dat...
-
这篇文章主要讲解了“用SQLite和FMDB而不用Core Data的原因分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用SQLite和FMDB而不用C...
-
个人遇到了一个需要互操作 Access 与 sqlite 的项目,其中涉及了诸多 join 和 relation。最重要的是数据的互相流动,这个项目使用了 pypyodbc 与 sqlobject,不免涉及了批量操作的问题。我将详细...
- 99+
- 2023-01-31
-
批量
Python
sqlite
-
举个例子: Css:假定进行如下简单设置; html{height:1000px;} JS: 复制代码 代码如下: function(){ window.scrollBy(0,100...
-
Android中基于Sqlite实现注册和登录功能,供大家参考,具体内容如下
前言
写这篇博客主要是为了巩固一下学的Sqlite知识以及梳理一下这个项目的逻辑
实现逻辑
项目的图片...
-
Beep、MessageBeep和Windows.Beep是用于产生计算机系统蜂鸣声音的函数。虽然这些函数的目的相同,但它们在使用方...
-
之前在搞ssd的时候没出问题,后来重装啦一下系统,把它拷回来,发现出了点问题,在训练或者测试的时候,需要输入:python examples/ssd/ssd_pascal.py 或者python examples/ssd/score_ss...
- 99+
- 2023-01-31
-
python
sudo
-
本篇内容主要讲解“Android基于Sqlite怎么实现注册和登录功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android基于Sqlite怎么实现注册和登录功能”吧!实现逻辑项目的图片结...
-
介绍
MySQL5.7官方文档关于相关参数的介绍:https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html
在5.7版本支...
-
很多人在学习python3的时候,在字典部分copy和deepcopy感到很困惑,现在针对这两个方法进行区分,即一种是浅复制(copy),一种是深度复制(deepcopy)。开头先下个结论我们日常所说的复制(自己在电脑硬盘上的复制...
- 99+
- 2023-01-31
-
copy
deepc
-
目录ObjectUtils.isEmpty()和null区别分配内存和赋值的区别Spring5.3之后StringUtils.isEmpty被弃用解决办法ObjectUtils.is...
-
1.BaseMapper接口 BaseMapper是Mybatis Plus提供的基础Mapper接口。它提供了常见的CRUD操作方法,如插入、修改、删除和查询等。BaseMapper是一个通用接口,...
- 99+
- 2023-08-31
-
mybatis
java
后端
-
前面第2篇文章中列出了全局段、events段、http段的一些指令的意义和用法,这篇文章将介绍server段和location段的相关指令。server段配置listen:listen指令有三种配置方法:1、listen address[:...
- 99+
- 2023-01-31
-
Nginx
server
loc
-
在React中,prop是component的属性,它是一个对象,用于从父组件向子组件传递数据。prop是component的一个只...
-
WM_CLOSE是一个Windows消息,用于关闭一个窗口。当用户点击窗口的关闭按钮或者调用CloseWindow函数时,系统会发送...
-
GetDC()和ReleaseDC()是用来获取和释放设备上下文句柄的函数,可以用于在Windows操作系统中进行绘图操作。GetD...
-
目录全等和不全等全等不全等相等和不相等相等不相等全等和不全等
全等和不全等比较的是符号两侧的操作数,以全等操作符为例,如果操作数满足全等则返回true,否则返回false。全等和不全...
-
目录一 pom二 启动类三 配置文件四 新建数据库五 实体类1 Clazz2 Student六 控制器七 Repository层1 ClazzRepository2 StudentR...
-
setCapture和releaseCapture是浏览器的两个DOM方法,用于设置和释放鼠标的捕获。setCapture方法用于将...
- 99+
- 2023-09-13
-
setCapture
|
0