基于SQLCipher插件的Ionic SQLite數(shù)據(jù)庫加密

一颓鲜、思路歷程:

因為之前據(jù)說 SQLCipher 插件不能很好地實現(xiàn)加解密的功能,而且之后還要與語音模塊的C庫做接口铸敏,所以本想就此做一個 Cordova 插件來做一層統(tǒng)一的C接口封裝杆融,來統(tǒng)一調(diào)用其它C接口,以便輕松擴展后面的C庫柏副,調(diào)研后發(fā)現(xiàn)代價較高。這個 Cordova-Hello-JNI-Plugin 可能以后要是做的時候還可能會用到蚣录。

  1. 插件至少要做 AndroidiOS 兩套割择,Android 還好說,因為貧窮包归,iOS 沒法測試。
  2. 還要寫什么回調(diào)函數(shù),煩得很

所以公壤,思忖了再三换可,決定還是先搭環(huán)境看看 SQLCipher 加密到底哪里不好使。

二厦幅、 Ionic & Cordova環(huán)境搭建

據(jù)一開始那次搭 Ionic 的環(huán)境已過去半年沾鳄,早已記不得,重新來吧确憨。

  1. 新建Ionic工程
    ionic start sqlite-test2 blank
  2. 添加 CordovaAndroid 平臺支持
    ionic cordova platform add android
  3. 添加 CordovaCrosswalk 支持
    cordova plugin add cordova-plugin-crosswalk-webview
  4. 添加 Cordovacordova-sqlcipher-adapter 插件支持
    cordova plugin add cordova-sqlcipher-adapter

好的译荞,環(huán)境搭完了,值得一提的是休弃,在第一次安裝的時候會遇到一個報錯吞歼,原因是 cordova-android 必須得是6版本。第二次塔猾,就沒了??篙骡。

三、具體SQLite操作頁面

  1. 添加頁面
    ionic generate page sqlite

  2. Oh...不需要丈甸,我們在首頁上做就可以糯俗,以上是想記錄 generate 語句可以實現(xiàn) Generate pipes, components, pages, directives, providers, and tabs (ionic-angular >= 3.0.0) (來自這里)的正規(guī)生成。以下為具體頁面內(nèi)容睦擂。
    home.html

    <ion-header>
      <ion-navbar>
        <ion-title>
          Ionic Blank
        </ion-title>
      </ion-navbar>
    </ion-header>
    
    <ion-content padding>
      <button ion-button (click)="openDB()">Open DB</button>
      <ion-label color="primary">SQL:</ion-label>
      <ion-input #sql_stm placeholder="SQL Statement"></ion-input>
      <button ion-button color="secondary" clear (click)="sql_stm.value=''">clear</button>
      <button ion-button (click)="execSQL(sql_stm.value)" color="secondary">ExecSQL</button>
      <button ion-button (click)="closeDB()" color="danger">Close DB</button>
      <ion-input style="height: 200px" placeholder="Enter a description" [(ngModel)]="textArea"></ion-input>
      <button ion-button full color="dark" (click)="clear()">Clear</button>
    </ion-content>
    

    home.ts

    import { Component, OnInit } from '@angular/core';
    import { NavController } from 'ionic-angular';
    @Component({
      selector: 'page-home',
      templateUrl: 'home.html'
    })
    export class HomePage implements OnInit{
      textArea: string;
      db = null;
      dbConfig = {
        name: 'demo.db',
        key: '1234',
        location: 'default'
      };
      constructor(public navCtrl: NavController) {
        this.textArea = "";
      }
      ngOnInit() {
        this.updateTextArea(JSON.stringify(Object.keys(window)));
      }
      selfTest() {
        document.addEventListener('deviceready', function() {
          window['sqlitePlugin'].selfTest(() => {
            this.updateTextArea('SELF test OK');
          });
        });
      }
      echoTest() {
        document.addEventListener('deviceready', function() {
          window['sqlitePlugin'].echoTest(() => {
            this.updateTextArea('ECHO test OK');
          });
        });
      }
      openDB() {
        document.addEventListener('deviceready', () => {
          this.db = (<any>window).sqlitePlugin.openDatabase(this.dbConfig);
        });
      }
      execSQL(sql) {
        // const sql = 'INSERT "main"."db_test" VALUES (1);';
        this.db.executeSql(sql, [], rs => {
          this.updateTextArea(JSON.stringify(rs));
        }, error => {
          this.updateTextArea(JSON.stringify(error.message));
        });
      }
      updateTextArea(text) {
        this.textArea = this.textArea + '\n' + text;
      }
      closeDB() {
        this.db.close();
        alert("Close DB");
      }
      clear() {
        this.textArea = "";
      }
    }
    
  3. 測試通過 PRAGMA rekey='****' 改變密碼語句可以使用得湘。

  4. 關(guān)于SQLite加速,參考《提升SQLite數(shù)據(jù)插入效率低顿仇、速度慢的方法》淘正。因為SQLCipher是JavaScript的封裝,并沒有提供全部的 C 導(dǎo)出函數(shù)夺欲,所以分析過后跪帝,只能從三個層面加速 SQL

    • 顯式開啟事務(wù),SQLCipher 天然提供 db.transaction 接口些阅。
    • 批量提交 SQL 語句伞剑,SQLCipher 推薦使用 db.sqlBatch 接口。
    • 寫同步(synchronous)市埋,使用 PRAGMA 語句 關(guān)閉寫同步:PRAGMA synchronous = OFF;

參考資料:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缤谎,隨后出現(xiàn)的幾起案子抒倚,更是在濱河造成了極大的恐慌,老刑警劉巖坷澡,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件托呕,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機项郊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門馅扣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人着降,你說我怎么就攤上這事差油。” “怎么了任洞?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵蓄喇,是天一觀的道長。 經(jīng)常有香客問我交掏,道長妆偏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任耀销,我火速辦了婚禮楼眷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熊尉。我一直安慰自己罐柳,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布狰住。 她就那樣靜靜地躺著张吉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪催植。 梳的紋絲不亂的頭發(fā)上肮蛹,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音创南,去河邊找鬼伦忠。 笑死,一個胖子當著我的面吹牛稿辙,可吹牛的內(nèi)容都是我干的昆码。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邻储,長吁一口氣:“原來是場噩夢啊……” “哼赋咽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吨娜,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脓匿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宦赠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陪毡,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡米母,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毡琉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爱咬。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绊起,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燎斩,我是刑警寧澤虱歪,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站栅表,受9級特大地震影響笋鄙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怪瓶,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一萧落、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洗贰,春花似錦找岖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绎晃,卻和暖如春蜜唾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庶艾。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工袁余, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咱揍。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓颖榜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親述召。 傳聞我的和親對象是個殘疾皇子朱转,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評論 25 707
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,431評論 2 45
  • 前言:用cordova開發(fā)hybrid app的過程中积暖,由于是html5開發(fā)的app藤为,在手機上很多權(quán)限受限制...
    京東內(nèi)部優(yōu)惠券閱讀 5,377評論 5 65
  • 小女子踐行第五天。 互聯(lián)網(wǎng)時代真是一個打碎的世界夺刑,碎到無法拼湊又隨意捏合缅疟,而且捏合到以前任何時代都無法達到的程度分别。...
    淺灘小貝閱讀 188評論 0 1
  • 年紀越大,需要扮演的角色越多存淫,需要承擔的責任越重耘斩。 人在小時候,就是兩條線的交點桅咆。一條主線是在家做好孩子括授,另外一條...
    三月南國閱讀 311評論 0 0