`

SQLite 数据库加密的一种解决方案

阅读更多

SQLite 数据库加密的一种解决方案

 

    SQLite 是一个非常小巧的跨平台嵌入式数据库,它的数据库以文件的形式存放在本地磁盘上,但是在其开源的免费版中它却缺少了一个数据库中几乎是必备的功能,那就是对于数据库的加密。 SQLite 的数据库文件可以被任何的文本编辑工具打开,从而获取到其中的数据,这一点令很多开发者感到不安。

 

但是其实 SQLite 是支持数据库加密的,前些天看到了网友 arris 的帖子,具体如下:

sqlite 的源代码中原本就考虑了加密的实现,并且保留了接口 sqlite3_key sqlite3_rekey ,只是这两个函数在 free 版本中没有实现,但幸运的是, sqlite 的源代码的代码是开放并允许修改,我们可以很方便的增加加密的实现。在 http://www.sqlite.com.cn/POParticle/3/216.Html 链接的的代码包中就包含有可加密 sqlite 的源代码的实现,我根据这个包编译了一个可加密的 sqlite 。这个包加密实现调用了 windows API 的加密函数,所以只能在 windows 中使用。

 

这个可加密的版本是在一个 ADO.NET 2.0 SQLite Data Provider 的基础上改过来的( http://www.sqlite.com.cn/POParticle/3/216.Html ),据原作者声称效率损失在千分之一以下。原始工程是基于 VS2005 的,但是考虑到其普及性还不是很广,所以重新建立了一个居于 VC2003 的工程。

 

其实 SQLite 的两个加密函数使用起来非常的简单,下面分情况说明:

     给一个未加密的数据库添加密码:如果想要添加密码,则可以在打开数据库文件之后,关闭数据库文件之前的任何时刻调用 sqlite3_key 函数即可,该函数有三个参数,其中第一个参数为数据库对象,第二个参数是要设定的密码,第三个是密码的长度。例如: sqlite3_key(db,"1q2w3e4r",8);        // 给数据库设定密码1q2w3e4r

     读取一个加密数据库中的数据:完成这个任务依然十分简单,你只需要在打开数据库之后,再次调用一下 sqlite3_key 函数即可,例如,但数据库密码是123456 时,你只需要在代码中加入sqlite3_key(db,"123456",6);

     更改数据库密码:首先你需要使用当前的密码正确的打开数据库,之后你可以调用 sqlite3_rekey(db,"112233",6) 来更改数据库密码。

     删除密码:也就是把数据库恢复到明文状态。这时你仍然只需要调用sqlite3_rekey 函数,并且把该函数的第二个参数置为NULL 或者"", 或者把第三个参数设为0

 

加密后数据库文件显示为乱码:

 

为此我建立了一个简单的示例:

sqlite3 *db;

    sqlite3_stmt *stat;

    char *zErrMsg = 0;

    char temp[256], FileRoot[256];

    char buffer2[1024]="0";

 

    sprintf(temp, _T("%s"), _T("utf.db"));

    CCodingConv::GB2312_2_UTF8(FileRoot, 256, temp, 0);

    sqlite3_open(FileRoot, &db);

 

    if (db == NULL)

    {

        return -1;

    }

 

    sqlite3_key(db,"1q2w3e4r",8);

 

    sqlite3_exec(db, "CREATE TABLE list (fliename varchar(128) UNIQUE, fzip text);", 0, 0, &zErrMsg);

    sqlite3_prepare(db, "insert into list values (' 中文GB2312 编码',?);", -1, &stat, 0);

 

    strcpy(temp, " 测试数据UTF-8 的支持情况");

    int len = (int )strlen(temp);

 

    sqlite3_bind_text(stat, 1, temp, len, NULL);

    sqlite3_step(stat);

 

    sqlite3_prepare(db, "select * from list;", -1, &stat, 0);

    sqlite3_step(stat);

 

    const unsigned char * test = sqlite3_column_text(stat, 1);

    int size = sqlite3_column_bytes(stat, 1);

 

    printf("%s", test);

 

    sqlite3_finalize(stat);

    //sqlite3_rekey(db,"",0);

    sqlite3_close(db);

分享到:
评论

相关推荐

    Sqlite数据库加密小工具

    这个"Sqlite数据库加密小工具"很可能就是基于这样的扩展,用于帮助用户对SQLite数据库进行加密和解密操作。 加密过程通常包括以下步骤: 1. **安装加密库**:首先,你需要在你的开发环境中集成像SQLCipher这样的...

    Qt中SQlite数据库加密SqliteCipher 操作实例,打开多个数据库,附着数据库跨库查询.zip

    SQLiteCipher是一种针对SQLite数据库的加密解决方案,它提供了一种安全的方法来存储敏感数据,同时保持与标准SQLite API的兼容性。 首先,SQLiteCipher是SQLite的一个分支,它在数据库文件级别提供了AES-256加密。...

    sqlite 数据库加解密工具 绿色版v2

    综上所述,“SQLite 数据库加解密工具 绿色版v2”为用户提供了一种便捷的方式来保护 SQLite 数据库的安全,通过加密确保数据在存储和传输过程中的隐私性。通过了解加密和解密的原理,我们可以更好地理解和利用这款...

    SQLite 1.0.112 版,支持数据库加密的版本,支持64和32位

    SQLite的加密机制通常基于AES(高级加密标准),这是一种广泛认可的加密算法,提供了强大的数据安全性。 在1.0.112版本之后,从113版本开始,SQLite不再支持访问加密的SQLite数据。这可能是因为加密技术的更新或...

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

    WinForm是.NET Framework提供的一种用于创建Windows桌面应用程序的用户界面(UI)框架。它允许开发者使用拖放工具设计UI,并通过C#代码实现业务逻辑。在本项目中,我们将创建一个简单的WinForm界面,包含输入框供...

    sqlite加密数据库可视化工具

    1. SQLite数据库加密: SQLite提供了一种名为SQLite Encryption Extension (SEE) 的机制来实现数据库加密。SEE通过在SQLite内部添加一个加密层,使得数据在写入磁盘之前先进行加密,读取时再解密。这确保了即使...

    一个完整版的数据库加密系统

    1. **SQLite 数据库加密的一种解决方案从三个不同的层次实现对数据库数据的加密.docx**:这份文档可能详细阐述了一种加密方法,该方法可能涉及数据库文件、表、以及字段三个层面的加密,确保多层防护。 2. **[推荐]...

    sqlcipher加密sqlite数据库练习

    SQLCipher是一个基于SQLite的数据库加密解决方案,它通过在SQLite之上添加一层加密层,使得数据库文件在磁盘上以密文形式存储,从而确保数据在未授权的情况下无法读取。SQLCipher采用了256位AES(高级加密标准)算法...

    SQLite ODbc 支持加密

    SQLite ODBC(Open Database Connectivity)驱动程序是一种允许应用程序通过ODBC接口与SQLite数据库进行交互的工具。在IT领域,SQLite是一种轻量级、开源的嵌入式SQL数据库引擎,广泛应用于移动设备、桌面应用和...

    用VB.net操作SQLite数据库的完整工程代码

    SQLite提供了一种高效、可靠且易于集成的数据存储解决方案,尤其适用于桌面应用程序和移动设备。VB.NET是.NET框架的一部分,提供了丰富的功能来创建Windows应用程序,包括与数据库的交互。 首先,为了在VB.NET项目...

    sqlite数据加密demo程序

    实现SQLite数据库加密的方法很多,例如SQLCipher、SQLite Encryption Extension (SEE)等。SQLCipher是一款流行的开源解决方案,它提供了一个安全的API,允许开发者在标准SQLite API之上进行加密操作。这个demo可能...

    @journeyapps/sqlcipher sqlite3加密

    SQLCipher是一款开源的、基于SQLite3的数据库加密解决方案,它为SQLite数据库提供了透明的数据加密功能,确保在存储和处理敏感信息时提供安全保护。 首先,我们需要了解SQLite3。SQLite3是一个轻量级的、自包含的、...

    SQLCipher为sqlite数据库设置密码

    总的来说,SQLCipher为sqlite数据库提供了一种简单而有效的加密解决方案,适用于那些对数据隐私和安全有较高要求的应用程序。通过合理集成和使用,开发者可以在保护数据的同时,享受到SQLite带来的便利和灵活性。

    SQLite数据库管理工具(SQLiteStudio) v3.1.1 windows,mac,linux版集合

    总之,SQLiteStudio v3.1.1是一个强大而全面的SQLite数据库管理解决方案,无论你是开发者、系统管理员还是数据分析人员,都能借助其功能强大的特性高效地管理和维护SQLite数据库。无论是进行日常的数据操作,还是...

    sqlite crypt支持加密数据库

    SQLite Crypt 是一种专门用于加密SQLite数据库的解决方案,它提供了安全的数据存储方式,以防止未经授权的访问。SQLite Crypt的工作原理是在数据写入数据库时对其进行加密,并在读取时解密,确保即使数据库文件被...

    sqlcipher4 可设置sqlite数据库密码

    总之,SQLCipher4为SQLite数据库提供了安全的加密解决方案,确保了数据在存储和传输过程中的安全性。它简化了开发者的工作,使他们能够在不牺牲性能的前提下,轻松地保护应用程序中的敏感数据。

    SQLite3.7.3 加密 静态库

    总的来说,SQLite3.7.3加密静态库为需要在嵌入式或移动环境中提供安全数据存储的开发者提供了一种可靠的选择。尽管这是一个较旧的版本,但对于许多仍然使用它的项目来说,它仍然提供了一个简单且有效的加密解决方案...

    SQLite数据库

    SQLite数据库是一种开源、轻量级、自包含的关系型数据库管理系统,广泛应用于移动设备、嵌入式系统以及桌面应用中。它的设计目标是提供一个无需服务器进程、简单易用且高度可靠的数据库解决方案。SQLite数据库文件是...

    带加密功能的sqlite3

    SQLCipher是一个开源的SQLite3加密解决方案,它使用AES(高级加密标准)256位加密算法对数据库进行加密。这确保了即使数据库文件被盗或丢失,数据依然保持安全,因为没有正确的密钥,任何人都无法解密并访问其中的...

Global site tag (gtag.js) - Google Analytics