MAC終端使用sqlcipher生成加密數(shù)據(jù)庫(kù)

前言:由于新項(xiàng)目中大量數(shù)據(jù)操作都和數(shù)據(jù)庫(kù)有關(guān),因此決定給數(shù)據(jù)庫(kù)進(jìn)行套殼加密,防止數(shù)據(jù)庫(kù)被串改或者被有心人查看,對(duì)比再三決定使用免費(fèi)的SQLCipher進(jìn)行加密。

本文是在作者使用mac終端生成加密數(shù)據(jù)庫(kù),使用方法以及踩過的坑都會(huì)在本文中一一說明

SQLCipher 下載鏈接

SQLCipher 官方文檔

20200612更新

對(duì)于最新版的官網(wǎng)下載的sqlcipher,安裝的時(shí)候需要如下命令

libcryptoPath和prefixPath需要替換為自己的對(duì)應(yīng)路徑

./configure --enable-tempstore=yes --disable-tcl --with-crypto-lib=none CFLAGS="-mmacosx-version-min=10.7 -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS5 -DNOCRYPT -I/openssllib/include" LDFLAGS="libcryptoPath" CC=clang --prefix= prefixPath

make

libcryptoPath作者的路徑是/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.a
prefixPath作者的路徑是/usr/local/Cellar/openssl/1.0.2s/lib


SQLCipher下載成功之后放到桌面,打開終端,cd到當(dāng)前目錄下,執(zhí)行
  1. 復(fù)制大法$ ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC"
    LDFLAGS="-lcrypto"

2.作者在執(zhí)行這句話的時(shí)候遇到了一個(gè)問題(sqlite3.c:18280:10: fatal error: 'openssl/rand.h' file not found)如果您沒有遇到可直接忽略
3.對(duì)于出現(xiàn)(sqlite3.c:18280:10: fatal error: 'openssl/rand.h' file not found)的解決辦法是繼續(xù)在終端執(zhí)行$ ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC"
LDFLAGS="/opt/local/lib/libcrypto.a"問題即可解決
4.如果提示sqlcipher找不到,則需要更新 brew install sqlcipher
5.make

以上過程走完,SQLCipher就配置好可以直接使用了,使用方法以官網(wǎng)教程為準(zhǔn),本文只做舉例說明
前置工作,把需要加密的數(shù)據(jù)庫(kù)原件放入到剛才下載的sqlcipher-master同一目錄下,

使用方法

1.cd 到當(dāng)前目錄(sqlcipher-master目錄)

  1. ./sqlcipher plaintext.db(plaintext.db為你需要加密的數(shù)據(jù)庫(kù),出現(xiàn).help警告不用管,繼續(xù)往下執(zhí)行)
    3.sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'testkey';(加密密鑰)
    4.sqlite> SELECT sqlcipher_export('encrypted');
    5.sqlite> DETACH DATABASE encrypted;
正常來說到這里數(shù)據(jù)庫(kù)加密就已經(jīng)完成了,生成的encrypted.db就是加密過后的db,可是作者在把加密后的db放入工程時(shí)發(fā)現(xiàn),一直提示數(shù)據(jù)庫(kù)已被加密,(已使用對(duì)應(yīng)解密方法).原因無(wú)它。作者在此嘗試修改已加密數(shù)據(jù)庫(kù)的密碼和cipher_page_size,最終解決該問題
解決方法
  1. ./sqlcipher encrypted.db(當(dāng)前已經(jīng)加密過的數(shù)據(jù)庫(kù))
    2.sqlite> PRAGMA key = 'testkey';(原始密碼)
    3.sqlite> ATTACH DATABASE 'newdb.db' AS newdb KEY 'newkey';(修改密碼,同時(shí)創(chuàng)建一個(gè)新的加密db)
    4.sqlite> PRAGMA newdb.cipher_page_size = 4096;(iOS端通用4096)
    5.sqlite> SELECT sqlcipher_export('newdb');
    6.sqlite> DETACH DATABASE newdb;
作者使用的數(shù)據(jù)庫(kù)操作是用的微信團(tuán)隊(duì)開發(fā)的wcdb(swift)版,支持sqlcipher解密操作,只需要幾句代碼搞定解密,而且wcdb是鏈?zhǔn)秸Z(yǔ)法,使用簡(jiǎn)潔方便。算了不吹了,用到了自己去看吧
WCDB下載鏈接
到這里使用sqlcipher就完成了,如果你在嘗試使用終端對(duì)自己的數(shù)據(jù)庫(kù)加密,如果你也是使用的sqlcipher,如果你在使用sqlcipher加密的過程中有遇到問題,很樂意您在下方分享您的寶貴意見
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章介紹如何對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行加密,基于FMDB+SQLCipher,標(biāo)明踩過的坑,留給同樣掉進(jìn)坑里的小伙伴參考...
    7544eb39c4ac閱讀 6,690評(píng)論 3 28
  • 關(guān)于SQLiteSQLite是一個(gè)輕量的、跨平臺(tái)的、開源的數(shù)據(jù)庫(kù)引擎,它的在讀寫效率、消耗總量、延遲時(shí)間和整體簡(jiǎn)單...
    Crazy2015閱讀 3,952評(píng)論 0 5
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,205評(píng)論 3 119
  • 吃飯時(shí),好友在群里說今晚恒大比賽有門票,我要趕回家,就把票給了領(lǐng)導(dǎo)。之后朋友圈,群里就開始各種他們?cè)诂F(xiàn)場(chǎng)的刷屏。 ...
    夏筠若閱讀 219評(píng)論 4 3
  • 2016年1月1日,當(dāng)大家沉浸在新年的歡喜中時(shí),我拎著我的行李上了開往成都的列車,開始了我新年的工作。走過人潮人海...
    強(qiáng)說愁閱讀 362評(píng)論 0 0

友情鏈接更多精彩內(nèi)容