Visual Studio 2010环境下Sqlite3加密版(由wxSqlite制作)使用方法
2013-11-20 00:53
483 查看
SQLite 3 开源版不带加密功能,对于一个保存在本地的数据库来说没有加密功能让人难以接受,只要用记事本打开数据库就可以看到数据库内保存的数据,对安全多多少少有一点影响。有一个办法是把内容加密后保存到数据库中,但遇到类似 like,或字段内容与字段内容比较这就不行了。治本的办法是让 SQLite 原生的支持加密。好在 SQLite 的作者预留了加密解密的相关接口,许多爱好者也自己修改源版添加加密功能。如果你也在关注,那你可能已经阅读了大量关于如何添加加密的文章,同时我也不是很通相关的技术,我就不再讲解如何修改源码了。虽然网上有大量的文章教你如何修改源码,但都没有提供编译后的
DLL 文件,或者提供的 DLL 版本过低。这里介绍一个开源项目:wxSQLite3,该项目是一个 SQLite 的 C++ warpper,它顺带将 SQLite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在这里下载到最新的包,在目录 \sqlite3\secure 下有这几个目录,aes128 目录下的 sqlite3.dll 文件,是已编译的用128位 AES 算法加密的 SQLite 3 DLL 文件,而 aes 256 目录下的是用256位 AES 算法加密的,而 src 目录下是实现加密的
SQLite 3 源代码。同时 wxSQLite3 项目更新很快,你总是可以下载到较新的包。从1.9.8版本开始将对256位 AES 加密算法进行实验,估计不久的版本就可以稳定使用。
使用起来也很简单,首先打开数据库 sqlite3_open,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。
sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。
int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db, "abc", 3);
sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常操作数据库,不需要再执行 sqlite3_key。
int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),参数同上。
清空密钥为 sqlite3_rekey( db, NULL, 0)。
Sqlite3是著名的嵌入式数据库,应用之广就不多说了。本篇主要介绍如何使用加密功能。Sqlite3本身提供了加密的接口,但是加密功能并没有实现,用户要使用的话需要自己编写代码来实现加密功能。幸运的是,另一个开源工程wxSqlite(对Sqlite做的一个包装)实现了Sqlite3的加密模块,并且Sqlite3部分可以单独下载。下载地址:http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/下载后在压缩包内可以看到wxsqlite[版本号]\sqlite3目录。
要使用的话,只要:
1. 在新建一个C++工程(托管、非托管皆可)
2. 将include文件夹下的sqlite3.h拷贝到工程根目录下
3. 将secure\aes128(或secure\aes256)目录下的sqlite3.dll和sqlite3.lib拷贝到工程根目录下
4. 在工程中添加sqlite3.h,并在其最前面添加代码:
#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif
5. 在工程名下右键,选择属性->linker->input->AdditionalDependencies中打开下拉菜单,选择Edit,输入sqlite3.lib后确定
6. 别忘了将sqlite3.dll拷贝到最终程序运行位置。
以上主要是做了两个工作:
1. 添加对sqlite3的引用(包括.h文件和.lib文件设置)
2. 启用加密功能,即添加SQLITE_HAS_CODEC预编译命令
有了加密功能之后,在代码里面使用就简单多了(关于引用sqlite3.h就不多说了)。在成功打开数据库之后(比如运行sqlite3_open之后),使用如下运行如下函数即可:
int result = sqlite3_key( db, "pwd", 3 ); //添加、使用密码
result = sqlite3_rekey( db, "sqlite3", 7 ); //修改密码
这两个函数的参数是一样的:
参数1:数据库指针(sqlite3*),就是打开数据库时得到的那个。
参数2:密码
参数3:密码长度
值得注意的是:
1. 在没有加密的数据库上面,可以直接使用sqlite3_key对其进行加密。
2. 如果数据库已经加密,打开数据库后需要首先运行sqlite3_key解密数据库,才能正常进行其他操作(包括修改密码),否则将会得到SQLITE_NOTADB返回值,错误提示:”file is encrypted or is not a database”。
在使用加密之后,sqlite3的数据库文件就不再是明文了。
DLL 文件,或者提供的 DLL 版本过低。这里介绍一个开源项目:wxSQLite3,该项目是一个 SQLite 的 C++ warpper,它顺带将 SQLite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在这里下载到最新的包,在目录 \sqlite3\secure 下有这几个目录,aes128 目录下的 sqlite3.dll 文件,是已编译的用128位 AES 算法加密的 SQLite 3 DLL 文件,而 aes 256 目录下的是用256位 AES 算法加密的,而 src 目录下是实现加密的
SQLite 3 源代码。同时 wxSQLite3 项目更新很快,你总是可以下载到较新的包。从1.9.8版本开始将对256位 AES 加密算法进行实验,估计不久的版本就可以稳定使用。
使用起来也很简单,首先打开数据库 sqlite3_open,然后在操作数据库之前执行 sqlite3_key 后就可进行数据库操作,否则会返回错误。
sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。
int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db, "abc", 3);
sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常操作数据库,不需要再执行 sqlite3_key。
int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),参数同上。
清空密钥为 sqlite3_rekey( db, NULL, 0)。
Sqlite3是著名的嵌入式数据库,应用之广就不多说了。本篇主要介绍如何使用加密功能。Sqlite3本身提供了加密的接口,但是加密功能并没有实现,用户要使用的话需要自己编写代码来实现加密功能。幸运的是,另一个开源工程wxSqlite(对Sqlite做的一个包装)实现了Sqlite3的加密模块,并且Sqlite3部分可以单独下载。下载地址:http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/下载后在压缩包内可以看到wxsqlite[版本号]\sqlite3目录。
要使用的话,只要:
1. 在新建一个C++工程(托管、非托管皆可)
2. 将include文件夹下的sqlite3.h拷贝到工程根目录下
3. 将secure\aes128(或secure\aes256)目录下的sqlite3.dll和sqlite3.lib拷贝到工程根目录下
4. 在工程中添加sqlite3.h,并在其最前面添加代码:
#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif
5. 在工程名下右键,选择属性->linker->input->AdditionalDependencies中打开下拉菜单,选择Edit,输入sqlite3.lib后确定
6. 别忘了将sqlite3.dll拷贝到最终程序运行位置。
以上主要是做了两个工作:
1. 添加对sqlite3的引用(包括.h文件和.lib文件设置)
2. 启用加密功能,即添加SQLITE_HAS_CODEC预编译命令
有了加密功能之后,在代码里面使用就简单多了(关于引用sqlite3.h就不多说了)。在成功打开数据库之后(比如运行sqlite3_open之后),使用如下运行如下函数即可:
int result = sqlite3_key( db, "pwd", 3 ); //添加、使用密码
result = sqlite3_rekey( db, "sqlite3", 7 ); //修改密码
这两个函数的参数是一样的:
参数1:数据库指针(sqlite3*),就是打开数据库时得到的那个。
参数2:密码
参数3:密码长度
值得注意的是:
1. 在没有加密的数据库上面,可以直接使用sqlite3_key对其进行加密。
2. 如果数据库已经加密,打开数据库后需要首先运行sqlite3_key解密数据库,才能正常进行其他操作(包括修改密码),否则将会得到SQLITE_NOTADB返回值,错误提示:”file is encrypted or is not a database”。
在使用加密之后,sqlite3的数据库文件就不再是明文了。
相关文章推荐
- Visual Studio 2010环境下Sqlite3加密版(由wxSqlite制作)使用方法
- Visual Studio 2010环境下Sqlite3加密版(由wxSqlite制作)使用方法
- Visual Studio 2010(.NET 4.0)中使用SQLite.NET
- access2007、2010设置密码,提示“使用分组加密进行加密与行级别锁定不兼容。行级别锁定将被忽略。”的解决方法
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 持续集成实践:使用Visual Studio 2010 Coded UI Test 制作能自动安装/卸载UI应用的程序
- SQLite 3.7.13的加密解密(六)—— 使用方法
- Visual Studio 2010使用Visual Assist X的方法
- 使用Visual Studio 2010制作安装包
- Visual Studio 2010使用Visual Assist X的方法
- 在Visual Studio 2010中设置编写C程序环境的方法
- SQLite安装及在Visual studio 2010(VS2010)中的使用
- Visual Studio 2010 集成 SP1 补丁 制作 Visual Studio 2010 Service Pack 1 完整版安装光盘的方法
- Visual Studio 2010 VB.NET 中使用System.Web.HttpUtility.UrlEncode提示HttpUtility不是Web成员的解决方法!
- 在Visual Studio 2010中设置编写C程序环境的方法
- 在Visual Studio 2010中配置使用SQLite3
- visual Studio 2010 附加到进程的使用方法
- 持续集成实践:使用Visual Studio 2010 Coded UI Test 制作能自动安装/卸载UI应用的程序
- GDAL181在VC2010环境下的使用方法
- Visual Studio 2010(.NET 4.0)中使用SQLite.NET