1. 程式人生 > >[DB那些事]資料庫加密

[DB那些事]資料庫加密

說到資料庫加密,目前最好且唯一的方案就是SqlCipher對sqlite3整體加密,微信也用的它。開源,且支援很多平臺。

單就Android來說,整合不算太麻煩,1個jar包,3個so庫,1個zip。

jar包中基本上重寫了android.database.sqlite包中所有的類,全部替換成了net.sqlcipher.sqlite包。why?因為sqlcipher加密後,需要密碼才能開啟該資料庫。所以它把所有的都重寫了一遍,這是一個坑,一會Stay再來說明。

整體來說sqlcipher還是比較好用的,封裝好了跟正常操作資料庫的方式一樣,只是在getWritableDatabase()時要多傳個password引數。

sqlcipher在效能上沒有太大的損失,而且在移動端資料量不是很大,基本可以忽略不計了。

現在坑來了,假如你之前用的是資料庫框架,而不是使用原生的方式,那麼整合起來還有些麻煩。當然如果用的物件型資料庫,那跟sqlcipher就一點關係都沒有了。我們這裡只說,如果以前用的是基於sqlite的資料庫框架整合sqlcipher。

比如,ormlite,它是object-relation-mapping,將你model中宣告的變數通過註解的方式和資料庫的表字段一一對應起來。

這個對映不在乎資料庫是sqlite,mysql還是什麼。在ormlite-core核心包中,與資料庫的連線是個proxy,在對應的ormlite-android中來使用android系統提供給我們的db連線方式來實現這個proxy。這就是為什麼ormlite要有兩個jar包。

如果要使用sqlcipher,那麼所有android.database.sqlite中的類都要換成net.sqlcipher.sqlite中的類。但是ormlite-android中用的都是android.database.sqlite。這是個問題。對吧?

所幸ormlite分成了兩個包,ormlite-core.jar, ormlite-android.jar 並且它們還是開源的。我們可以把ormlite-android.jar中所有引用android.database.sqlite的地方手動替換為net.sqlcipher.sqlite。這個注意不錯吧?

也就是說。ormlite-core.jar不變,照樣匯入這個jar,只是ormlite-android.jar要改成sqlcipher.jar中的那些Cursor, SqliteDatabase等等。

確定好解決方案之後,剩下的就好辦了。

這裡說android studio的整合方式,如果是eclipse可以直接新建一個工程,做成library。

首先,新建一個module,因為會改很多東西,所以儘量單獨放一個module,以後做其他專案可以方便遷移。

匯入sqlcipher,配置好環境。確保sqlcipher沒問題,能正確的加解密,進行crud。

匯入ormlite-core.jar, 建議使用android studio的jcenter倉庫來匯入

去ormlite的github主頁,把ormlite-android的原始碼拉下來,只需要ormlite-android就可以了。

注意。要用git拉程式碼,別download as zip。你需要手動切換到對應的commit上。比如ormlite-core.jar版本是4.48,那麼對應的ormlite-android也應該切換到4.48的tag上。保證兩個版本一致。

將所有ormlite-android中的程式碼copy到你的module/src目錄下,然後手動將所有import android.database.sqlite的地方手動替換為import net.sqlcipher.sqlite

改為之後會有一個錯誤,因為sqlcipher需要密碼去getWritableDatabase(String password),這裡需要對原始碼做些修改,如下圖。

當然還有其他的小錯誤,自己想辦法解決好了,不難。

在自己的主app module中要繼承的SqliteOpenHelper還是OrmliteSqliteOpenHelper,sqlcipher已經整合到ormlite內部了,對外不可見。你只需要用帶有password的構造方法就可以了。如下圖。

其他呼叫方式都不用變了。以前寫的ormlite程式碼都不用換了。開森,對不對。

程式碼已經放到github上了。 
github.com/Stay/ormlite-sqlcipher

p.s. 如果你現在使用的ormlite版本不是4.48,那麼就自己動手把對應的ormlite-android的原始碼拉下來手動替換。

相關推薦

[DB那些]資料庫加密

說到資料庫加密,目前最好且唯一的方案就是SqlCipher對sqlite3整體加密,微信也用的它。開源,且支援很多平臺。 單就Android來說,整合不算太麻煩,1個jar包,3個so庫,1個zip。 jar包中基本上重寫了android.database.sqlite包中所有的類,全部替換成了net.s

Shiro -認證憑據(密碼)加密那些

一般來說,實際專案中隱私資料沒有在網路上明文跑路,都會採用不同的加密演算法。Shiro中的認證憑據通常也會採用演算法進行加密。 【1】CredentialsMatcher介面 該介面只有一個方法,doCredentialsMatch,就是用來進行密碼比較的! 原始碼如下:

公鑰加密演算法那些 | RSA 與 ECC 系統對比

https://blog.csdn.net/u010646653/article/details/73888734 一、背景 據記載,公元前 400 年,古希臘人發明了置換密碼。1881 年世界上的第一個電話保密專利出現。在第二次世界大戰期間,德國軍方啟用「恩尼格瑪」密碼機,密碼學在戰爭中起著非

和安全有關的那些 非對稱加密 數字摘要 數字簽名 數字證書 SSL HTTPS及其他

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【MySQL】關於資料庫效能的那些

關於資料庫效能的故事 面試時多多少少會講到資料庫上的事情,“你對資料庫的掌握如何?”,什麼時候最考驗資料庫的效能,答應主要方面上講就是大資料量的讀寫時,而電商類的大促活動就是考驗各自的資料庫效能的時候啦。 對於web伺服器而言,資料量大時,我們可以簡單的通過橫向擴充

資料庫分庫分表那些

王鵬,去哪兒網高階研發工程師,2017 年加入去哪兒機票事業部,主要從事後端研發工作,目前在機票事業部負責行程單、故障演練平臺和公共搜尋服務ES相關的研發和運維工作,個人對於分散式海量資料儲存架構以及大資料有濃厚的興趣。 背景: 最近工作在做Elastic Search 相關的服務的運維開發工作,從索引的

資料庫設計的那些

本文主要以mysql為主: 1,表和欄位的設計規範,(當然每個公司有其自己的規範),     (1)要有可讀性:eg:StudentAddress,不要設計成stuaddress     (2)表意性:eg:Student,不

和安全有關的那些(非對稱加密、數字摘要、數字簽名、數字證書、SSL、HTTPS及其他)

本文原文連線:http://blog.csdn.net/bluishglc/article/details/7585965 對於一般的開發人員來說,很少需要對安全領域內的基礎技術進行深入的研究,但是鑑於日常系統開發中遇到的各種安全相關的問題,熟悉和了解這些安全技術的基本原理和使用場景還是非常必要的。本文將對

和安全有關的那些(非對稱加密、數字摘要、數字簽名、數字證書、SSL、HTTPS)

對於一般的開發人員來說,很少需要對安全領域內的基礎技術進行深入的研究,但是鑑於日常系統開發中遇到的各種安全相關的問題,熟悉和了解這些安全技術的基本原理和使用場景還是非常必要的。本文將對非對稱加密、數字摘要、數字簽名、數字證書、SSL、HTTPS等這些安全領域內的技術進行一番

資料庫】load data infile上億條的海量資料匯入mysql的那些

因為做股票金融的,每天產生的資料量是很大的,一個月幾十億的交易記錄,也常有出現,特別是今年大跌之前大漲那會。 作為程式設計師,問題來了,有時需要將一些並不是特別符合規範的csv檔案匯入資料庫中,而且每個檔案有十幾萬行,而這樣的檔案幾萬個,於是幾十億的記錄如何匯入資料庫呢?

MacOS下postgresql資料庫密碼的那些

如果你是第一次玩postgresql資料庫,你會發現你給role或者user明明設定了密碼,但在登入的時候毛都不用輸入,直接就進去了,怎麼那麼爽快!? 雖然爽快,但貌似不該這樣啊. 其實這些都和一個重要的檔案有關,它就是pg_hba.conf! 那麼這個檔

mongodb那些--複製資料庫和表

總結, 資料表的複製 db.runCommand({cloneCollection:"commit.daxue",from:"198.61.104.31:27017"}); 資料庫的複製  db.copyDatabase("user","user","198.61

Unity3D 遊戲加密解密那些

0x01 加密 加密主要是為了防止美術資源被竊取(換皮)和程式碼被惡意修改(外掛輔助,廣告,二次打包) 1.資源的加密 先說說Unity載入資源的方式,第一種Resources.Load,第二種AssetBundle。 第一種是Unity預設的資源格式,如果對這個資源進行加

時序資料庫連載系列:時序資料庫那些

時序資料庫連載系列:時序資料庫那些事 正如《銀翼殺手》中那句在影史流傳經典的臺

搞定加密卡!小米門禁卡模擬那些

key 克隆 plus 數據保存 實用工具 按鍵 關聯 ssi 更換 實體芯片卡作為目前最成熟的技術,已被廣泛應用於身份識別、金融消費、安全認證等領域。大多數人幾乎每天都要和各種各樣的卡片打交道,連回個家都得先把門卡翻出來,其實小米不僅可以模擬公交和銀行卡,還能瞬間秒變

關於資料庫,程式設計師應該瞭解的那些

資料庫的選型 對於很多程式設計師來說,公司選擇什麼樣的資料庫,基本不需要你來決定。當你加入一個公司的時候,公司的大部分技術選型已經確認,特別是資料庫選型,因為資料庫一旦選擇,後期遷移的代價還是很大的。 ​ 隨著大資料時代的來臨,湧現出了很多新型資料庫,在公司遇到資料效能瓶頸,喊去IOE口號或者是想嚐鮮時,

哈夫曼編碼(Huffman coding)的那些,(編碼技術介紹和程序實現)

信號 truct 依次 while 交換 需要 .text 示例 system 前言   哈夫曼編碼(Huffman coding)是一種可變長的前綴碼。哈夫曼編碼使用的算法是David A. Huffman還是在MIT的學生時提出的,並且在1952年發表了名為《

Android Studio 那些|Activity文件前標識圖標顯示為 j 而是 c

div roi 右下角 ext blog 識圖 cti 問題: content 問題:Activity文件前標識圖標顯示為 j 而是 c 的圖標,或是沒有顯示,並且自己主動提示不提示 解決:這是由於你的studio設置了省電模式,你能夠通過 File>

軟件project—思考項目開發那些(一)

app 爛代碼 fontsize 模式 大型 不明確 極限 後拋 con 閱讀文件夾: 1.背景2.項目管理,質量、度量、進度3.軟件開發是一種設計活動而不是建築活動4.高速開發(簡單的系統結構與復雜的業務模型)5.技術人員的業務理解與產品經理的業務理解的終於業務模型

IPv4中的A,B,C類網及子網掩碼那些

來看 了解 擁有 nbsp 開發 信息 alt 位或 其余 IP 地址的主要類型有五種 A B C D 和 E 一般 A B C 類地址更為常用 每類地址都是由 32 位或 4 個字節組成 A類地址: 在 A 類地址中第一個 8 位字節表示網絡部分 其余 3 個 8 位字節