SQLite对本地数据库加解密

2023-04-12  本文已影响0人  younger_times

场景: 在iOS或安卓中,内置本地数据库可以提高使用的体验感,离线部分数据,但这些数据可能属于敏感数据,通过砸壳、逆向等方式可以窃取数据库并造成数据库的泄漏。

sqlcipher的安装【Mac】

Sqlcipher安装方式>>>
documentation

brew install sqlcipher

进入本地数据库所在目录

sqlcipher plaintext.db

加密

sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'testkey';
sqlite> SELECT sqlcipher_export('encrypted');
sqlite> DETACH DATABASE encrypted;

解密

sqlcipher encrypted.db
sqlite> PRAGMA key = 'testkey';
sqlite> ATTACH DATABASE 'plaintext.db' AS plaintext KEY '';  -- empty key will disable encryption
sqlite> SELECT sqlcipher_export('plaintext');
sqlite> DETACH DATABASE plaintext;

iOS:SQLite.swift的运用

SQLite Doc

pod 'SQLite.swift/SQLCipher'

注意:pod 'SQLite.swift'pod 'SQLite.swift/SQLCipher'如果同时引用会引起错误,引入 SQLite.swift/SQLCipher即可。

参考sqlcipher先外部进行加密后,导入至项目中

import SQLite

let db = try Connection("path/to/encrypted.sqlite3")
try db.key("secret")
try db.rekey("new secret") // 对加密的数据库替换加密KEY

SQLite.swift 也存在sqlcipher_export

let db = try Connection("path/to/unencrypted.sqlite3")
try db.sqlcipher_export(.uri("encrypted.sqlite3"), key: "secret") 
上一篇下一篇

猜你喜欢

热点阅读