electron 集成 SQLCipher
mac
安装 brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装 sqlcipher
brew options sqlcipher
brew install sqlcipher
这部分不知道有没有起作用
export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS="-I/usr/local/include -I/usr/local/include/sqlcipher"
export CXXFLAGS="$CPPFLAGS"
克隆 sqlcipher 源码,并链接
git clone https://github.com/sqlcipher/sqlcipher.git
pushd sqlcipher
make clean
./configure --enable-tempstore=yes --enable-load-extension --disable-tcl --with-crypto-lib=commoncrypto CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS5" LDFLAGS="-framework Security -framework Foundation"
make
成功后该文件夹下出现 .libs 隐藏文件夹
创建 custom-binding.gyp 文件
{
"includes": [ "deps/common-sqlite.gypi" ],
"variables": {
},
"targets": [
{
"target_name": "<(module_name)",
"include_dirs": [
"<!(node -e \"require('nan')\")",
"/Users/jinghongqiu/Desktop/sqlcipher/"
],
"libraries": [
"/Users/jinghongqiu/Desktop/sqlcipher/.libs/libsqlcipher.a"
],
"sources": [
"src/database.cc",
"src/node_sqlite3.cc",
"src/statement.cc"
]
},
{
"target_name": "action_after_build",
"type": "none",
"dependencies": [ "<(module_name)" ],
"copies": [
{
"files": [ "<(PRODUCT_DIR)/<(module_name).node" ],
"destination": "<(module_path)"
}
]
}
]
}
/Users/jinghongqiu/Desktop/sqlcipher 需要替换成 sqlcipher 克隆下来的路径
在 electron 项目中执行命令
echo "Copying custom binding.gyp (node-sqlite3)"
cp custom-binding.gyp node_modules/sqlite3/binding.gyp
echo "Rebuilding node-sqlite3 bindings with statically linked SQLCipher (libsqlcipher.a)"
npm rebuild sqlite3 --build-from-source --static_linking_path=/Users/jinghongqiu/Desktop/sqlcipher/.libs/libsqlcipher.a --runtime=electron --target=4.0.8 --dist-url=https://atom.io/download/electron
/Users/jinghongqiu/Desktop/sqlcipher 需要替换成 sqlcipher 克隆下来的路径
--target=4.0.8 中的数字为 electron 的版本
使用
// 在 electron 里才能使用
var sqlite3 = require('sqlite3')
var db = new sqlite3.Database('./test.sqlcipher')
db.serialize(() => {
db.run("PRAGMA KEY = 'secret'")
db.run("CREATE TABLE messages(id INTEGER, user VARCHAR, msg TEXT)")
db.run("INSERT INTO messages(id, user, msg) VALUES (1, 'coolaj86', 'this is test message number one')")
db.get("SELECT * FROM messages", (err, data) => {
if (err) {
console.error(err)
return
}
console.log(data)
})
})
用可视化工具打开 test.sqlcipher ,如果需要输入密码则集成成功。输入密码 secret,如果无法打开,则有可能是可视化工具问题(如 SQLiteManager 正确密码也无法打开)
参考
Building SQLCipher for node.js on Raspberry Pi 2
Setting up SQLCipher with node-sqlite3 and Electron
在 Node.js 中使用 SQLCipher
electron 集成 SQLCipher的更多相关文章
- electron 集成 nedb / sqlite3
nedb nedb 无法创建文件 // webpack 构建的前提 externals: process.env.web ? {} : { "nedb": "requir ...
- nodejs集成sqlite
正在物色node上面的轻量级嵌入式数据库,作为嵌入式数据库的代表,sqlite无疑是个理想的选择方案.npm上集成sqlite的库主要有两个——sqlite3和realm. realm是一个理想的选择 ...
- iOS SQLite解密之SQLCipher
开门见山,本文主要讲在Mac下使用SQLCipher编译解密数据库文件方法,iOS项目集成SQLCipher自己可以百度,网上帖子很多. 官方集成文档:https://www.zetetic.net/ ...
- Sentry快速开始并集成钉钉群机器人
Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃 Sentry本质上是一种帮助您实时监控和修复崩溃的服务 1. 安装客户端SDK 这里我们安装Java平台的SDK, ...
- ORMLite整合SQLCipher
Android数据库加密,目前就是SQLCipher对SQLite整体加密,微信也是使用这种方式.开源,且支持很多平台. SQLCipher虽说开源了,但是编译好的jar和so文件,还是要收费的. 但 ...
- Electron结合React开发环境遇到的问题
链接 将create-react-app与electron集成在了一个项目中.但是在React中无法使用electron 当在React中使用require('electron')时就会报TypeEr ...
- 将现有vue项目基于electron打包成桌面应用程序
一.前言 项目本来打算采用B/S架构去做的,浏览器网址方式打开还是让用户不方便: 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目 ...
- 什么是electron
Electron 是什么 定义 Electron是一个能让你使用传统前端技术(Nodejs, Javascript, HTML, CSS)开发一个跨平台桌面应用的框架.这里所说的桌面应用指的是在Win ...
- Electron结合React,在渲染进程中使用 node 模块
Electron结合React,在渲染进程中使用 node 模块 问题 将create-react-app与electron集成在了一个项目中.但是在React中无法使用electron.当在Reac ...
随机推荐
- 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...
- LAMP 1.7Apache用户认证
假如我们要在www.aaa.com/的 abc/目录下放一些文件,只想让自己访问,做一个用户认证.输入正确的用户和密码才能访问 cd /data/www mkdir abc cd abc cp /et ...
- 24、嵌合体序列Chimeras
转载:http://www.cnblogs.com/xudongliang/p/6497465.html 嵌合体序列:由来自两条或者多条模板链的序列组成,示意图如下: 在PCR反应中,在延伸阶段,由于 ...
- geneid/genesymbol/ensemblid等之间的转换
在基因注释时,难免碰到各种GENE在不同数据库之间的ID转换(例如,Ensembl ID 转Entrez ID,或者Entrez ID与GENE Symbol之间的转换).这里介绍一下常用的三个在线网 ...
- 13.Weblogic任意文件上传漏洞(CVE-2018-2894)复现
Weblogic任意文件上传漏洞(CVE-2018-2894)复现 漏洞背景 WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限.两个页面分别为/ws_utc/be ...
- 18. CTF综合靶机渗透(十一)
靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...
- hdu1047
#include<stdio.h>#include<string>#include<iostream>using namespace std; //高精度加法//只 ...
- VR中运动控制器的传送系统
创建一个VRPawn 新建一个BluePrint,父类选择Pawn,我们命名为VRPawn,打开它. 添加一个Scene命名为CameraRoot 在CameraRoot节点下添加一个Camera 在 ...
- .net core 第一个mvc项目目录结构简析
创建项目的命令 首先来认识一下创建项目可使用的各种命令,.NETCore 的命令都以 dotnet 打头,这很好理解,输入 dotnet xxx,就是执行环境变量指向的 C:\Program ...
- Ansible Playbooks高级使用
文件操作 文件创建 file 用于设置文件/链接/目录的属性,或者删除文件/链接/目录 ### state如果是directory当目录不存在时会自动创建:如果是file当文件不存在时不会自动创建 - ...