天天看點

SQLite 3.7.13的加密解密(三)—— 建立加密解密函數

先不用管上面的編譯錯誤,建立crypt.c和crypt.h,用來實作加密解密函數和相應接口的定義。

crypt.c裡實作了加密解密函數,代碼如下:

<b>#include</b> "crypt.h"

<b>#include</b> "memory.h"

/***********

 關鍵加密函數

 ***********/

<b>int</b> <b>My_Encrypt_Func</b>(<b>unsigned</b> <b>char</b> * pData, <b>unsigned</b> <b>int</b> data_len,

              <b>unsigned</b> <b>char</b> * key, <b>unsigned</b> <b>int</b> len_of_key)

{

       <b>unsigned</b> <b>int</b> i;

       <b>unsigned</b> <b>char</b> bit, val;

       <b>for</b> (i = 0; i &lt; data_len; i++)

       {

              val = ~(*pData);

              *pData = val;

              pData++;

       }

       <b>return</b> 0;

}

 關鍵解密函數

<b>int</b> <b>My_DeEncrypt_Func</b>(<b>unsigned</b> <b>char</b> * pData, <b>unsigned</b> <b>int</b> data_len,

這裡加密解密函數就是簡單的采用了求反的操作,目的是用來示範加密和解密。以後實際運用中把這兩個函數内的算法修改為自己的加密解密算法即可。

注意:這裡的加密解密函數實際上沒有用到Key值,是以加密後使用任意Key值均可以解開資料庫,但是加密後,用第三方工具是不能直接打開的。

crypt.h用來聲明加密解密函數的定義,以便sqlite3.c包含加密解密接口,代碼如下:

/**

 * 加密函數

 */

              <b>unsigned</b> <b>char</b> * key, <b>unsigned</b> <b>int</b> len_of_key);

 * 解密函數

注意:網上的代碼中,參數key定義為“const char *”類型,與sqlite3.c代碼一起編譯時會有錯誤,這裡按照sqlite3.c中的類型修改為“unsigned char *”類型。

本文轉自 tywali 51CTO部落格,原文連結:http://blog.51cto.com/lancelot/940812,如需轉載請自行聯系原作者