SQLite 3 开源版不带加密功能,对于一个保存在本地的数据库来说没有加密功能让人难以接受,只要用记事本打开数据库就可以看到数据库内保存的数据,对安全多多少少有一点影响。有一个办法是把内容加密后保存到数据库中,但遇到类似 like,或字段内容与字段内容比较这就不行了。治本的办法是让 SQLite 原生的支持加密。好在 SQLite 的作者预留了加密解密的相关接口,许多爱好者也自己修改源版添加加密功能。如果你也在关注,那你可能已经阅读了大量关于如何添加加密的文章,同时我也不是很通相关的技术,我就不再讲解如何修改源码了。虽然网上有大量的文章教你如何修改源码,但都没有提供编译后的 DLL 文件,或者提供的 DLL 版本过低。

解决方案一:

这里介绍一个开源项目:wxSQLite3,该项目是一个 SQLite 的 C++ warpper,它顺带将 SQLite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在http://sourceforge.net/projects/wxcode/files/Components/下载到最新的包,在目录 \sqlite3\secure 下你可以找到一个 sqlite3.dll 文件,这个就是已编译的带加密的 SQLite 3 DLL 文件,而且 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)。

缺点:

严重依赖于wxWidgets C++ library。不利于发布,编译、维护繁琐。要去除对wxwidgets的依赖,可以参考http://blog.csdn.net/tszhao/article/details/7254160这篇文章。

解决方案二:

SQLite数据库的传输层进行全面加密的工具。而通过使用 SQLCipher ,整个加密过程对客户端是透明的,无需改动应用程序。

SQLCipher has broad platform support for withC/C++, Obj-C, QT,Win32/.NET, Java, Python, Ruby, Linux,Mac OS X,iPhone/iOS,Android,Xamarin.iOS, andXamarin.Android.

SQLCipher对android和ios都是开源的。

windows支持:

android支持:

iphone支持:

待补充。

python支持:

SQLCipher is an SQLite extension that provides transparent 256-bit AES encryption of database files.

In order to encrypt a new database or query existing data you must key it before using it.

This app does it for you. You only need to specify the database key in your project's settings.py file.

For more about SQLCipher take a look at http://sqlcipher.net/.

Requirements

python-sqlcipher (Python compiled with SQLCipher support)

For more about python-sqlcipher take a look at:

方案三:简短内容不存储在sqlite3中,用crypto加密成文件

在此我们将使用到PyCrypto模块,可以访问

http://www.pycrypto.org/ 来获得此模块。该模块包括多种加密算法,如AES、MD5、SHA等,我们可以访问https://www.dlitz.net/software/pycrypto/apidoc/ 来查看相关API.

PyCrypto模块的功能是非常强大的,此处仅起抛砖引玉的作用,感兴趣的朋友可以稳步至其官方网站,其中有很多算法的例子。

[Python]代码片段

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#encoding:utf-8

"""

示例代码

"""

fromCrypto.CipherimportAES

key='0123456789abcdef'

mode=AES.MODE_CBC

encryptor=AES.new(key, mode)

text='j'*64+'i'*128

ciphertext=encryptor.encrypt(text)

"""

上例中的key是16位, 还可以是24 或 32 位长度, 其对应为 AES-128, AES-196 和 AES-256.

解密则可以用以下代码进行:

"""

#decryptor = AES.new(key, mode)

#plain = decryptor.decrypt(ciphertext)

欢迎加入 sqlite3 加密 全文搜索 讨论组qq群号: 330649719

python sqlite3加密_sqlite3加密 - kjpioo的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. python 论坛模板_python模板 - PH的个人空间 - OSCHINA - 中文开源技术交流社区

    看Python帮助文档模板部分,抄下来以备记忆 11.2. Templating The string module includes a versatile Template class with ...

  2. qt和python关系_Python与Qt - AlphaJay的个人空间 - OSCHINA - 中文开源技术交流社区

    入门知识- Python与Qt关系 1. Qt内建的Script支持:Qt Script for Applications (QSA),跨平台脚本工具箱,为静态的Qt/C++程序提供了一个脚本界面,可 ...

  3. python颜色相关系数_python相关系数 - osc_w6qmyr6s的个人空间 - OSCHINA - 中文开源技术交流社区...

    皮尔逊相关系数: 用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间. 几组 的点集,以及各个点集中 和 之间的相关系数.我们可以发现相关系数反映的是变量之间的线性关系和相关性的方向( ...

  4. python莫比乌斯_莫比乌斯函数 - osc_7eqzxl4g的个人空间 - OSCHINA - 中文开源技术交流社区...

    前导 要学习莫比乌斯函数 需要学习 到 积性函数,深度理解欧拉筛. 先说说什么是积性函数吧. 积性函数 其实积性函数非常好理解, 定义 积性函数:若gcd(a,b)=1,且满足f(ab)=f(a)f( ...

  5. php 随机字节集,易语言字节集动态加密 - osc_zsm40sb6的个人空间 - OSCHINA - 中文开源技术交流社区...

    原理很简单: 字节集1(n位随机字节集) 字节集2(m位随机字节集) 被加密字节集=字节集1+被加密字节集+字节集2 被加密字后的字节集=加密(被加密字节集,密码) 解密后的字节集=解密(被解密字节集 ...

  6. des vue 双倍长 解密_3DES双倍长加密 - osc_ojx9hm4t的个人空间 - OSCHINA - 中文开源技术交流社区...

    importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax. ...

  7. 仿射解密c语言程序实验报告,仿射加密解密 - 依姆哣特的个人空间 - OSCHINA - 中文开源技术交流社区...

    //功能:仿射加密 密钥:[3][5][9][11][15][17][19][21][23]有逆元的数 例子:pku  c=7,d=3  输出 :EVN 编辑环境:vc++6.0 include in ...

  8. no判断 python yes_python的判断 - osc_kewb5r6m的个人空间 - OSCHINA - 中文开源技术交流社区...

    我们今天要来讲一下关于python的判断语句.没错,和我们之前科普的布尔值有关,就是判断为真的时候返回1,判断为假的时候返回0.其实这个真假的判定标准是由我们自己决定的. 我们来看一下这个条件判断的语 ...

  9. python列表去重效率_python面试题 - osc_yztbpii7的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.一行代码实现1--100之和 In [1]: sum(range(1,101)) Out[1]: 5050 1-100求和 2.如何在一个函数内部修改全局变量 a=520 deffun():glo ...

最新文章

  1. inux 下查看服务器负载均衡
  2. 小程序自定义分享事件及回调函数
  3. 计算机组成原理 — 总线系统
  4. Flutter retrofit:only “package“ and “asset“ schemes supported
  5. 怎么自学python编程-怎么自学python?
  6. C++中用new和不用new定义类的对象的区别解答
  7. jax-ws cxf_走向REST:将Tomcat嵌入Spring和JAX-RS(Apache CXF)
  8. python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...
  9. vscode open in browser 默认浏览器
  10. 织梦5.7生成HTML很慢,Dedecms 生成静态网页速度特别慢的问题
  11. c fun函数求n个整数的平均值_Python语法示例——函数
  12. 计算机软件著作权登记指南
  13. 海湾crt显示与服务器连接断开,secureCRT自动断开的解决方法
  14. 聊聊 iframe 的优缺点以及使用场景
  15. 在google上的东西
  16. 摸鱼系列之idea摸鱼插件推荐
  17. 工业4.0时代,怎样为孩子筹备未来的教育?
  18. 【数据结构导论】第 1 章:概论
  19. 计算机专业大专还学语数外吗,大学越学越秃的5大专业:计算机排第五,数学落榜,榜首实至名归...
  20. 什么是中间件?中间件的作用,怎么使用中间件及应用场景

热门文章

  1. python方格染色_判定二部图的着色算法(Python),题,染色法,判断,二分
  2. 零基础学Python:自定义序列类的详细教程
  3. Python re 模块findall() 函数返回值展现方式详解
  4. python 的 str bytes 区别
  5. python 使用 sorted 对 列表嵌套元组的数据进行排序
  6. python selenium 三种等待方式详解
  7. 非常有用的15个Linux 服务器监控命令
  8. yii mysql 2002_YII 错误 SQLSTATE[HY000] [2002] No such file or directory
  9. 内部网站更换服务器,网站更换服务器的具体操作流程!
  10. muxer、demuxer muxer是什么?视频封装、解封装(逆封装)