zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/NKnife/p/10515662.html
Copyright © 2011-2022 走看看