2016-12-23 40 views
0

FMDB版本(2.6.2)數據庫總是返回YES

問題: 我測試FMDB和SQLCipher,並找到一個棘手的問題。 我加密密碼爲「test001」分貝成功,我將其導出並打開DB布勞爾分貝,與「test001」我打開它沒有任何問題。然後在Xcode中,我嘗試打開密碼爲'test002'的數據庫(我這樣做是爲了測試FMDB是否會告訴我我使用了錯誤的密碼),但是setkey()返回YES。我檢查db.lastErrorMessage,它返回零,這意味着FMDB認爲我給出正確key.Then我試着去閱讀使用的executeQuery()從數據庫數據,函數返回NO,和的NSLog顯示「文件被加密或不一個數據庫'。

任何人有同樣的問題?這是一個SQLite的錯誤,或者我用它錯誤的方式?

setkey() return YES

executeQuery() return NO due to decrypt error

回答

0

setKey(…)調用不驗證提供的密碼的有效期爲當前數據庫,而它只是使其中SQLCipher數據庫attach a codec context。那您發出以下數據庫的密鑰的下一個SQL命令將導致(如您使用的不是原始六角扳手這麼久)發生密鑰推導的,一般會驗證SQLCipher是否能夠使用該密鑰來訪問你的數據庫。通常,我們建議您嘗試執行以下查詢,以驗證密碼是否有效作爲sqlite_master表將始終存在,無論你的架構。

SELECT count(*) FROM sqlite_master; 
+0

非常感謝您!你拯救我的一天! – mamba