搜尋
首頁資料庫mysql教程分享SQLCipher資料庫如何加解密

介紹:

使用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導入到工程中作為靜態

分享SQLCipher資料庫如何加解密

#.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檔案匯入

分享SQLCipher資料庫如何加解密

#.a檔案

三,加入加密程式碼

分享SQLCipher資料庫如何加解密

開啟資料庫

一般是在資料庫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源码,这里有一份拓展,供参考:

分享SQLCipher資料庫如何加解密

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输入密码以后,就可以正常的对数据库进行增、删、改、查等操作了。

【相关推荐】

1. 免费mysql在线视频教程

2. MySQL最新手册教程

3. 数据库设计那些事

以上是分享SQLCipher資料庫如何加解密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL與Sqlite有何不同?MySQL與Sqlite有何不同?Apr 24, 2025 am 12:12 AM

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

MySQL中的索引是什麼?它們如何提高性能?MySQL中的索引是什麼?它們如何提高性能?Apr 24, 2025 am 12:09 AM

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

說明如何使用MySQL中的交易來確保數據一致性。說明如何使用MySQL中的交易來確保數據一致性。Apr 24, 2025 am 12:09 AM

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

在哪些情況下,您可以選擇PostgreSQL而不是MySQL?在哪些情況下,您可以選擇PostgreSQL而不是MySQL?Apr 24, 2025 am 12:07 AM

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

如何保護MySQL數據庫?如何保護MySQL數據庫?Apr 24, 2025 am 12:04 AM

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

您可以使用哪些工具來監視MySQL性能?您可以使用哪些工具來監視MySQL性能?Apr 23, 2025 am 12:21 AM

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

MySQL與SQL Server有何不同?MySQL與SQL Server有何不同?Apr 23, 2025 am 12:20 AM

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

在哪些情況下,您可以選擇SQL Server而不是MySQL?在哪些情況下,您可以選擇SQL Server而不是MySQL?Apr 23, 2025 am 12:20 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

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

SublimeText3 Mac版

SublimeText3 Mac版

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

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用