介紹:
使用SQLite資料庫的時候,有時候對於資料庫需求比較高,特別是在iOS8 .3之前,未越獄的系統也可以透過工具拿到應用程式沙盒裡面的文件,這個時候我們就可以考慮對SQLite資料庫進行加密,這樣就不用擔心sqlite文件洩露了
通常資料庫加密一般有兩種方式
1對所有數據進行加密
2對資料庫文件加密
第一種方式雖然加密了數據,但是並不完全,還是可以透過資料庫查看到表結構等信息,並且對於資料庫的數據,資料都是分散的,要對所有資料都進行加解密操作會嚴重影響效能,通常的做法是採取對檔案加密的方式
iOS免費版的sqlite函式庫並不提供了加密的功能,SQLite只提供了加密的介面,但並沒有實現,iOS上支援的加密函式庫有以下幾種
The SQLite Encryption Extension (SEE)
收費,有以下幾種加密方式RC4
AES-128 in OFB mode AES-128 in CCM mode AES-256 in OFB mode SQLiteEncrypt
收費,使用AES加密
SQLiteCrypt
收費,使用256-bit AES加密
SQLCipher
開源,託管在github上,實現了SQLite官方的加密接口,也加了一些新的接口,詳情請參閱這裡
前三種都是要收費的,SQLCipher是開源的,這裡我們使用SQLCipher。
SQLCipher有免費有收費兩款,以下是官網給的區別:
easier to setup, saving many steps in project configuration pre-built with a modern version of OpenSSL, avoiding another externaldependency much faster for each build cycle becausethe library doesn't need to be built from scratch on each compile (build timecan be up to 95% faster with the static libraries)
解析:
只是整合起來比較簡單,不用再加入OpenSSL依賴函式庫,而且編譯速度更快,從功能上來說沒有任何差別。光是為了上述一點便利去花費幾百美刀,對於我等苦逼RD來說太不值了,還好有一個免費版本。
sqlite是一款開源的輕量級資料庫,現在android和ios都在使用它來儲存結構化數據,但是加密版的並非開源。折中一下只能找開源的解決方案,sqlcipher是一個不錯的選擇,它可以對sqlite實現加密,並且有在android和ios都有相應的庫進行解密讀取,,只是引入的庫會增加app的大小。 SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite database files.
#整合
如果你使用cocoapod的話就不需要自己配置了,為了方便,我們直接使用FMDB進行操作資料庫,FMDB也支援SQLCipher
pod
'FMDB/SQLCipher', '~> 2.6.2' //自己看所需的版本
如果是手動的話,如下操作:
一,需要到www.zetetic.net/sqlcipher/ios-tutorial/
把sqlcipher-master下載,把其中的.xcodeproj導入到工程中作為靜態庫
#.xcodeproj檔案
這個是SQLCipher加密靜態模組;
二,設定Xcode
透過巨集(SQLITE_HAS_CODEC)設定SQLite是否開啟加密模組,我們需要在Xcode中設定開啟加密模組元件的宏,本文介紹CocoaPods方式的則不用配置。
(1)target -> Build Setting -> Other C Flags新增-DSQLITE_HAS_CODEC、-DSQLITE_TEMP_STORE=2、-DSQLITE_THREADSAFE、-DSQLCIPHER_CRYPTO_CC幾項配置。
如果沒有設定SQLITE_HAS_CODEC setKey:方法不會加密
(2)target -> Build Setting -> Other Linker Flags新增-framework Security設定。
(3)在TARGETS中把libsqlcipher.a檔案匯入
#.a檔案
三,加入加密程式碼
開啟資料庫
一般是在資料庫open之後就用這個setKey方法。
說明:
1.如果專案中原來有FMDB,不建議直接引入FMDB/SQLCipher,修改後不利於類別庫的統一管理和更新。我們可以直接將靜態庫檔案匯入到工程中,然後配置Xcode即可。簡單來說步驟如下:
(1)在你有FMDB的工程裡,加入.xcodeproj檔
(2)在工程的build setting裡修改兩個設定
#一個是other c flags,如上面圖的那個other c flags
一個是other link flags,入上圖那個other lilnk flags
然後FMDatabase的setkey方法就可以用了,在開啟資料庫後,呼叫此方法,資料庫檔案就加密可以了。
说到怎么在不改变原来的FMDB源码,这里有一份拓展,供参考:
FMDB源码加密拓展
这个是我的demo可以到这里下载:pan.baidu.com/s/1o8fNHay
说明:
In most cases SQLCipher uses PBKDF2, a salted and iteratedkey derivation function, to obtain the encryption key. Alternately, anapplication can tell SQLCipher to use a specific binary key in blob notation(note that SQLCipher requires exactly 256 bits of key material), i.e. PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'"; Once the key is set SQLCipher will automatically encryptall data in the database! Note that if you don't set a key then SQLCipher willoperate identically to a standard SQLite database.
一旦key被设置,SQLCipher将会自动加密数据库所有数据。
需要注意的是,在使用sqlite3_open打开或创建一个数据库,在对数据库做任何其它操作之前,都必须先使用sqlite3_key输入密码,否则会导致数据库操作失败,报出sqlite错误码SQLITE_NOTADB。
在sqlite3_open打开数据库成功,而且用sqlite3_key输入密码以后,就可以正常的对数据库进行增、删、改、查等操作了。
【相关推荐】
2. MySQL最新手册教程
3. 数据库设计那些事
以上是分享SQLCipher資料庫如何加解密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

選擇PostgreSQL而非MySQL的場景包括:1)需要復雜查詢和高級SQL功能,2)要求嚴格的數據完整性和ACID遵從性,3)需要高級空間功能,4)處理大數據集時需要高性能。 PostgreSQL在這些方面表現出色,適合需要復雜數據處理和高數據完整性的項目。

MySQL數據庫的安全可以通過以下措施實現:1.用戶權限管理:通過CREATEUSER和GRANT命令嚴格控制訪問權限。 2.加密傳輸:配置SSL/TLS確保數據傳輸安全。 3.數據庫備份和恢復:使用mysqldump或mysqlpump定期備份數據。 4.高級安全策略:使用防火牆限制訪問,並啟用審計日誌記錄操作。 5.性能優化與最佳實踐:通過索引和查詢優化以及定期維護兼顧安全和性能。

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版
中文版,非常好用