SQLite 的實踐學習(1) — 加入AES和MD5加密

來源:互聯網
上載者:User
      SQLite具有諸多的優點,如零配置、移植性、緊湊性、簡單性、靈活性、自由授權、可靠性和易用性等。它的各種特點使它非常適合做一些中小型項目的DBMS,或構建Cache,或嵌入式項目的DBMS。

      最近在學習SQLite的使用,為了讓學習更有效,在實踐中學習,所以制定以下任務,一邊做一邊學:

      1) 在SQLite的普通版本上加入加密功能(SQLite預留的加密介面,只是需要另外去完成)。

      2) 把加密版本編譯一個.Net的版本。

      3) 通過NDK的方式把加密版本的SQLite加入到Android。

 

不要浪費時間,現在就做第一個任務,加密

      正如上面所說的,SQLite的作者早就考慮到以後資料加密的需求,所以預留了加密介面,我們只需要完成這些介面,就可以讓它儲存的資料變成密文。在說怎麼加入加密功能之前,先簡單說一下SQLite的檔案。它非常簡單和緊湊,只有 sqlite3.h 和 sqlite3.c 兩個檔案,.h檔案定義了一些宏和全部介面,.c檔案就是介面實現,我們主要修改.c檔案的實現。

      1)要開啟加密功能,需要定義一個宏。

#ifndef SQLITE_HAS_CODEC
# define SQLITE_HAS_CODEC
#endif

          定義該宏之後,重新編譯代碼,發現現在編譯不通過了,提示有5個函數並沒有實現,它們分別是:

int sqlite3CodecAttach(sqlite3 * db,  int nDB, const void * pKey, int nKeyLen)
void sqlite3CodecGetKey(sqlite3 * db, int nDB, void ** Key, int * nKey)
int sqlite3_key(sqlite3 * db, const void * pKey, int nKey)
int sqlite3_rekey(sqlite3 * db, const void * pKey, int nKey)
void sqlite3_activate_see(const char * right)

      2)代碼的實現通過網上找的,不過在加密方面更改為密鑰產生方面使用MD5,資料加解密使用AES 256。

unsigned char* DeriveKey(const void* pKey, int nKeyLen)
{
    unsigned char* hKey = NULL;

    if (pKey == NULL || nKeyLen == 0)
    {
        return NULL;
    }

    hKey = (unsigned char*)sqlite3_malloc(DB_KEY_LENGTH_BYTE + 1);
    if (hKey == NULL)
    {
        return NULL;
    }

    hKey[DB_KEY_LENGTH_BYTE] == 0;
    md5((const unsigned char*)pKey, nKeyLen, hKey);
    return hKey;

          使用MD5的原因是:AES密鑰的長度為16位元組,如果使用者佈建的密碼長度不夠或者過長,就需要一定的轉換(補位、裁剪、變換等),由於MD5是輸入不定長度資訊,輸出也是固定長度為16位元組,所以直接使用它。

 

          vs2010編譯原始碼下載。  

 

          感謝: 

                董淳光之SQLITE3 使用總結 

                PolarSSL 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.