sqlcipher 是一个基于openssl加密功能sqlite3。形式上增加一些与加密功能相关
sql
语句;本质上是一个经过重新编译的sqlite3,不破坏原有功能,仅仅增添了加密特性。
SQLCipher是开源SQLite的一个扩展,此处不是作为SQLite插件,而是指扩展其功能,扩展sqlite API,因为SQLCipher需要重新编译SQLite,最终生成一个集成加密功能的node_sqlit3.node
node文件。SQLCipher对整个数据库文件加密。SQLCipher安装不需要复杂的配置环境,一般系统有npm
就可以针对一些环境进行安装,在过程中会自动安装构建的依赖项。与加密功能的sql语句往往放置最前面,一般是连接数据库之后,就执行这些语句。
- C/C++
- Obj-C
- QT
- Win32/.NET
- Java
- Python
- Ruby
- Linux
- Mac OS X
- iPhone/IOS
- Android
- Xamarin.IOS
- Xamarin.Android
- Electron
var SQLite3 = require('sqlcipher').verbose();
var sqlite = new SQLite3.Database('./test-win.db');
sqlite.run("pragma key = 'secret'");
sqlite.run("pragma cipher = 'aes-256-cbc'");//optional, default cipher be eqaul to 'aes-256-cbc'
注意:sqlcipher该插件是在sqlite3的基础上增添了加密功能。因此,使用sqlcipher可以对数据库文件进行加密或不加密。如果要对数据库文件进行加密,则连接(创建)数据库文件后,第一条sql
语句必须是pragma key = '...'
,否则将会出现意想不到的错误。
npm install sqlcipher
通过运行以上命令,将会根据系统的环境编译出相应(系统下node版本以及node位数)的sqlciher。默认支持以下三种系统环境。
- windows
- mac
- linux
通过携带参数可以在指定环境下进行编译。特定环境安装
npm install sqlcipher --target=`目标运行环境版本号` --target_arch=`目标运行环境位数` --dist-url=`目标运行环境下载地址` --runtime=`目标运行环境`
sqlcipher基于openssl加密库,支持多种加密算法,在实际开发中可以使用默认算法aes-256-cbc或者在支持的加密算法中选择其中某一个。
- aes-128-cbc
- aes-192-cfb
- aes-256-cbc(默认)
- cast
- rc4
sqlcipher 常用api有指定加密秘钥、指定加密算法、更换秘钥等。当然,如果需要改善加密环境下的sqlite性能,有更详细的api(即sql
语句)去优化项目。
1.加密秘钥
pragma key = 'secret';
2.加密算法
pragma cipher = 'aes-128-cbc';
3.更换秘钥
pragma rekey = 'aes-128-cbc';