2015-09-23 27 views
0

1)情況:我用sqlitecipcher爲Android,通過commonsguy as a library module友情提供存儲文本加密數據庫如何加密表查詢行大小

2)要求:我需要通知用戶空間有多大一個入口(「入口」應該在這裏讀爲「數據庫錶行」)在磁盤上採取

據我所知,SQLite(並因此sqlitecipher包裝)不提供API來檢查大小行,並在讀取條目後檢查字節數將給出未加密文本的大小,以便信息不正確。

當然,我可以再次AES數據並檢查大小,但這將浪費巨大的處理能力。

是否有任何可靠的公式可以計算文字AES加密後字符數量的變化?或者其他任何建議如何檢查加密表的行大小?

+0

我懷疑這很難做到可靠。我會作弊,並根據測試提出一些啓發式,在其中添加具有不同值的條目並查看手動生成的文件大小增量。有些東西從入口到入口不會有太大變化(例如,int的大小)。有些東西會改變很多(例如,BLOB的大小),但是您應該能夠想出一個公式,該公式的大小與組件的大小相近。要獲得額外的信用,請使用迴歸分析來提出公式。 :-) – CommonsWare

+0

另請參閱:http://stackoverflow.com/questions/13230267/check-how-much-space-a-single-row-takes-in-sqlite – CommonsWare

+0

謝謝,基於測試的估計是一種可能的解決方案,將不得不檢查它。我只將文本存儲在加密數據庫中。但是,不會因密碼(這是'sqlitecipher'中的加密/解密密鑰)的大小而變化嗎? – Droidman

回答

1

根據this linkSQLite的加密在頁面級別。對於這種加密,每個頁面隨後已經用16字節20字節的消息認證碼(HMAC_SHA1)的初始化向量來擴展。

隨着1024字節默認頁面大小和額外36字節,這給出了3.5%的開銷,可在行中均勻分佈。可能少一點取決於頁面中有多少額外的數據。