加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3加密

发布时间:2020-12-12 23:59:30 所属栏目:百科 来源:网络整理
导读:SQLite 3 开源版不带加密功能,对于一个保存在本地的数据库来说没有加密功能让人难以接受,只要用记事本打开数据库就可以看到数据库内保存的数据,对安全多多少少有一点影响。有一个办法是把内容加密后保存到数据库中,但遇到类似 like,或字段内容与字段内
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

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

解决方案一:

这里介绍一个开源项目:wxSQLite3,该项目是一个 SQLite 的 C++ warpper,它顺带将 SQLite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在http://sourceforge.net/projects/wxcode/files/Components/下载到最新的包,在目录 sqlite3secure 下你可以找到一个 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,int nKey),参数同上。

清空密钥为 sqlite3_rekey( db,NULL,0)。

缺点:

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

解决方案二:

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

SQLCipher has broad platform support for withC/C++,Obj-C,QT,Win32/.NETiPhone/iOSXamarin.iOS.

SQLCipher对android和ios都是开源的。

windows支持:

https://github.com/CovenantEyes/sqlcipher-windows这个已经做的很完善了

android支持:

https://github.com/sqlcipher/android-database-sqlcipher 这个已经做的很完善了

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'ssettings.pyfile.

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

Requirements

  • python-sqlcipher (Python compiled with SQLCipher support)

For more about python-sqlcipher take a look at:

https://code.launchpad.net/~jplacerda/+junk/python-sqlcipher

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

在此我们将使用到PyCrypto模块,可以访问 http://www.pycrypto.org/来获得此模块。该模块包括多种加密算法,如AES、MD5、SHA等,我们可以访问https://www.dlitz.net/software/pycrypto/apidoc/ 来查看相关API.
PyCrypto模块的功能是非常强大的,此处仅起抛砖引玉的作用,感兴趣的朋友可以稳步至其官方网站,其中有很多算法的例子。

[Python]代码片段

    推荐文章
      热点阅读