`
emowuyi
  • 浏览: 1540614 次
文章分类
社区版块
存档分类
最新评论

SQLite加密

 
阅读更多

关于SQLite

SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS、Android)。
然而免费版的SQLite有一个致命缺点:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。比如国内某团购iOS客户端的DB缓存数据就一览无余:

SQLite加密方式
对数据库加密的思路有两种:
1. 将内容加密后再写入数据库
这种方式使用简单,在入库/出库只需要将字段做对应的加解密操作即可,一定程度上解决了将数据赤裸裸暴露的问题。
不过这种方式并不是彻底的加密,因为数据库的表结构等信息还是能被查看到。另外写入数据库的内容加密后,搜索也是个问题。
2. 对数据库文件加密
将整个数据库整个文件加密,这种方式基本上能解决数据库的信息安全问题。目前已有的SQLite加密基本都是通过这种方式实现的。
SQLite加密工具
目前网上查询到iOS平台可用的SQLite加密工具有以下几种:
事实上SQLite有加解密接口,只是免费版本没有实现而已。而SQLite Encryption Extension (SEE)是SQLite的加密版本,提供以下加密方式:
  1. RC4
  2. AES-128inOFBmode
  3. AES-128inCCMmode
  4. AES-256inOFBmode
SQLite Encryption Extension (SEE)版本是收费的。
使用AES加密,其原理是实现了开源免费版SQLite没有实现的加密相关接口。
SQLiteEncrypt是收费的。
使用256-bit AES加密,其原理和SQLiteEncrypt一样,都是实现了SQLite的加密相关接口。
SQLiteCrypt也是收费的。
首先需要说明的是,SQLCipher是完全开源的,代码托管在Github上。
SQLCipher使用256-bit AES加密,由于其基于免费版的SQLite,主要的加密接口和SQLite是相同的,但也增加了一些自己的接口,详情见这里
SQLCipher分为收费版本和免费版本,官网介绍的区别为:
asier to setup, saving many steps in project configuration
pre-built with a modern version of OpenSSL, avoiding another external dependency
much faster for each build cycle because the library doesn't need to be built from scratch on each compile (build time can be up to 95% faster with the static libraries)
只是集成起来更简单,不用再添加OpenSSL依赖库,而且编译速度更快,从功能上来说没有任何区别。仅仅为了上述一点便利去花费几百美刀,对于我等苦逼RD来说太不值了,还好有一个免费版本。
鉴于上述SQLite加密工具中,只有SQLCiper有免费版本,下面将将着重介绍下SQLCiper。
在项目中使用SQLCipher
在项目中集成免费版的SQLCipher略显复杂,还好官网以图文的方式介绍的非常详细,集成过程请参考官网教程
使用SQLCipher初始化数据库
下面这段代码来自官网,其作用是使用SQLCipher创建一个新的加密数据库,或者打开一个使用SQLCipher创建的数据库。
  1. NSString*databasePath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0]
  2. stringByAppendingPathComponent:@"cipher.db"];
  3. sqlite3*db;
  4. if(sqlite3_open([databasePathUTF8String],&db)==SQLITE_OK){
  5. constchar*key=[@"BIGSecret"UTF8String];
  6. sqlite3_key(db,key,strlen(key));
  7. intresult=sqlite3_exec(db,(constchar*)"SELECTcount(*)FROMsqlite_master;",NULL,NULL,NULL);
  8. if(result==SQLITE_OK){
  9. NSLog(@"passwordiscorrect,or,databasehasbeeninitialized");
  10. }else{
  11. NSLog(@"incorrectpassword!errCode:%d",result);
  12. }
  13. sqlite3_close(db);
  14. }
需要注意的是,在使用sqlite3_open打开或创建一个数据库,在对数据库做任何其它操作之前,都必须先使用sqlite3_key输入密码,否则会导致数据库操作失败,报出sqlite错误码SQLITE_NOTADB。
在sqlite3_open打开数据库成功,而且用sqlite3_key输入密码以后,就可以正常的对数据库进行增、删、改、查等操作了。
使用SQLCipher加密已存在的数据库
SQLCipher提供了sqlcipher_export()函数,该函数可以方便的对一个普通数据库导入到SQLCipher加密加密的数据库中,操作方式如下:
  1. $./sqlcipherplaintext.db
  2. sqlite>ATTACHDATABASE'encrypted.db'ASencryptedKEY'testkey';
  3. sqlite>SELECTsqlcipher_export('encrypted');
  4. sqlite>DETACHDATABASEencrypted;
解除使用SQLCipher加密的数据库密码
sqlcipher_export()函数同样可以将SQLCipher加密后的数据库内容导入到未加密的数据库中,从而实现解密,操作方式如下:
  1. $./sqlcipherencrypted.db
  2. sqlite>PRAGMAkey='testkey';
  3. sqlite>ATTACHDATABASE'plaintext.db'ASplaintextKEY'';--emptykeywilldisableencryption
  4. sqlite>SELECTsqlcipher_export('plaintext');
  5. sqlite>DETACHDATABASEplaintext;
总体来说,SQLCipher是一个使用方便,灵活性高的数据库加密工具。
另外,我写了个SQLCipherDemo工程放到了CSDN上,有需要的同学请自行下载。
参考文档
分享到:
评论

相关推荐

    C#开发的WinForm---SQLite加密程序

    在本文中,我们将深入探讨如何使用C#进行WinForm应用程序开发,特别关注如何构建一个SQLite加密程序。SQLite是一个轻量级、开源的关系型数据库,它被广泛用于桌面应用和嵌入式系统,因为它无需服务器进程即可运行。...

    Delphi SQLite加密及应用实例

    Delphi SQLite加密及应用实例,支持加密的sqlite3.dll采用的是wxsqlite3-3.0.0,程序已经封装过,直接调用DMMain中的数据库连接函数、查询函数等,查询过程添加互斥锁,数据库地址通过AnsiToUTF8函数转换使其支持...

    Sqlite加密工具,包含源码 20230521更新:加入了sln,可以直接从项目打开

    本文将深入探讨SQLite加密工具及其源码,帮助你理解和掌握如何使用它来创建加密的SQLite数据库,同时提供一个学习SQLite编程的宝贵资源。 首先,SQLite的加密功能是通过扩展其原生API来实现的,它允许数据库在存储...

    sqlite加密扩展 完美支持delphi unidac及sqlite developer

    一个C++写的sqlite3.dll的扩展,这是最新版本,编译后的sqlite3.dll也是最新的3.76版,具有AES128和256的加密扩展,通过sqlite3_rekey函数调用就能直接实现对sqlite数据库的加密,非常方便,sqlite3目录下有直接编译...

    android 的sqlite数据库加密实现

    一、SQLite加密的必要性 1. 数据隐私:在移动设备上,用户数据可能包含个人隐私,如登录凭据、通讯录等,加密可以防止数据泄露。 2. 应用安全:防止恶意软件或黑客攻击,确保应用数据安全。 3. 法规合规:许多行业...

    SQLite数据库 加密解密工具

    本文将详细介绍如何使用.NET环境下的SQLite加密解密工具来确保数据库的安全。 首先,SQLite数据库的加密通常涉及到两方面的技术:透明数据加密(TDE)和应用程序级别的加密。TDE是在数据库级别进行的,数据在写入...

    Sqlite加密插件QtCipher

    Sqlite加密插件QtCipher是为SQLite数据库提供加密功能的一个Qt工程项目。该项目利用了sqlitecipher库,实现了对SQLite数据库文件的加密,确保了数据的安全性。对于开发者而言,这是一个非常实用的工具,尤其是当他们...

    Qt sqlite 加密

    ### Qt与SQLite加密技术详解 #### 一、背景介绍 在现代软件开发中,数据的安全性和隐私保护变得越来越重要。SQLite作为一种轻量级且广泛使用的嵌入式数据库系统,因其便携性和高效性而在多种应用场合中得到广泛...

    Qt的sqlite3加密插件

    qt的sqlite加密插件,资源在qt5.9.5下编译。可以直接放到qt插件目录下使用。将产生的sqlitecipher.dll拷贝到plugins\sqldrivers路径下。打开方式如下: QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITE...

    QT sqlite加密数据库引擎

    QT自带的Sqlite引擎是不支持加密的,所以自己实现了能够加密的Sqlite引擎,继承QSqlDriver实现的,与其他数据库一样使用QSqlDatabase进行操作,与QT自带数据库操作保持一致。文件包含项目源码及测试代码。

    sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite

    在标题"sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite"中,我们可以看到与 SQLite 相关的几个关键点:加密、sqlite3autoconf 和 wxSQLite。 1. **SQLite 加密**: SQLite 提供了一个可选的...

    sqlite加密数据库可视化工具

    本文将深入探讨SQLite加密数据库以及一款名为"DB Browser for SQLite"的可视化工具。 1. SQLite数据库加密: SQLite提供了一种名为SQLite Encryption Extension (SEE) 的机制来实现数据库加密。SEE通过在SQLite...

    加密sqlite

    在“加密sqlite”这个主题中,我们主要关注的是如何对 SQLite 数据库进行加密,以保护存储在其中的敏感信息。本文将深入探讨 SQLite 的加密机制、加密方法以及相关的安全考量。 SQLite 提供了多种加密选项,其中最...

    破解sqlite加密文件,DecryptSQLite-master.zip

    破解加密过的sqlite数据库文件,含破解程序项目文件(DecryptSQLite.csproj)、源代码文件(DecryptSQLite.cs)、编译后的可执行文件(DecryptSQLite.exe)。

    Android SQLite加密项目demo

    "Android SQLite加密项目demo"是一个示例项目,它演示了如何在Android应用中使用SQLite加密库来保护数据库的安全。 SQLite加密主要有以下几个关键知识点: 1. **SQLite加密库**:SQLite本身并不支持原生的加密功能...

    Qt Sqlite加密数据库驱动源代码

    这是我工作了一天的成果,压缩包内包括Qt sqlite加密驱动所有的代码,以及一个调用例程,还有一个sqlite3shell.exe工具,用于加密数据库命令行下的分析。 使用这个加密驱动很简单,只需以下3步: 1. 将驱动的代码...

    sqlite加密

    因此,"SQLite加密"就显得尤为重要,特别是对于那些需要保护敏感信息的应用。 SQLCipher是SQLite的一个扩展,它提供了透明的数据加密功能。SQLCipher使用工业标准的AES(Advanced Encryption Standard)算法来加密...

    sqlite加密版本

    sqlite官方并没有提供加密的功能,但提供了加密的接口。资源中的sqlite添加了加密功能。资源包含有源代码以及编译成功的dll(编译工具:VC++ 2010。)各位可以下载后自行根据源码重新编译。

    vc实现Sqlite数据库(加密DB、内存DB、临时DB)

    1. **SQLite加密**: SQLite提供了多种加密选项。最常用的是SQLite Encryption Extension (SEE),它是一个官方的SQLite扩展,可以对整个数据库进行256位AES加密。在VC++中,你可以通过编译SQLite源代码并链接到SEE...

    SQLite数据库加密/解密工具

    SQLite数据库加密/解密工具是一款专门用于SQLite数据库的安全软件插件。它提供了在C#环境下对SQLite数据库进行加密和解密的全套解决方案,让数据库管理员和开发者能够对敏感数据进行安全保护。软件的核心功能是通过...

Global site tag (gtag.js) - Google Analytics