【資料庫】SQLITE3 加密2

來源:互聯網
上載者:User
2       自己實現加解密介面函數4 |; Y6 a* x3 [5 k/ L
5 O8 t; k/ _. S/ W
如果真要我從一份 http://www.sqlite.org/ 網上down下來的 sqlite3.c 檔案,直接摸索出這些介面的實現,我認為我還沒有這個能力。
) k- d) y- s! n& q$ \. e9 t6 d* P5 d5 s0 I% k
好在網上還有一些代碼已經實現了這個功能。通過參照他們的代碼以及不斷編譯中vc給出的錯誤提示,最終我把整個介面整理出來。8 E' G9 @6 U1 j8 ~! f, V( d
1 ]8 S5 T) _2 L6 O% x, Z
實現這些預留介面不是那麼容易,要重頭說一次怎麼回事很困難。我把代碼都寫好了,直接把他們按我下面的說明拷貝到 sqlite3.c 檔案對應地方即可。我在下面也提供了sqlite3.c 檔案,可以直接參考或取下來使用。( e" V! h; m( o8 X5 v
   C% E+ ?- b! P+ s9 p. T
2 \6 H+ {, C+ [! S
* G7 j% N   ^! i. o6 e
這裡要說一點的是,我另外建立了兩個檔案:crypt.c和crypt.h。
: n1 {   d# M) S- p& a, M' P5 ]; l- G   h2 z, ~$ u# p
其中crypt.h如此定義:

複製內容到剪貼簿

代碼:

#ifndef   DCG_SQLITE_CRYPT_FUNC_

#define   DCG_SQLITE_CRYPT_FUNC_

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

董淳光寫的 SQLITE 加密關鍵函數庫

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

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

關鍵加密函數

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

int My_Encrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key );

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

關鍵解密函數

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

int My_DeEncrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key );

#endif

其中的 crypt.c 如此定義:

複製內容到剪貼簿

代碼:

#include "./crypt.h"

#include "memory.h"

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

關鍵加密函數

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

int My_Encrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key )

{

return 0;

}

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

關鍵解密函數

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

int My_DeEncrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key )

{

return 0;

}

這個檔案很容易看,就兩函數,一個加密一個解密。傳進來的參數分別是待處理的資料、資料長度、密鑰、密鑰長度。
# s$ Y0 b" I) a
1 q# X! i" O: ^. c" O2 X處理時直接把結果作用於 pData 指標指向的內容。- J7 ~% J% g0 |( Z6 }   y5 _
5 h2 E9 P1 s& F8 x# q4 i
你需要定義自己的加解密過程,就改動這兩個函數,其它部分不用動。擴充起來很簡單。0 x% z: b; @! \1 B) E

& ?- l8 \9 {" n2 O: m$ d這裡有個特 點,data_len 一般總是 1024 位元組。正因為如此,你可以在你的演算法裡使用一些特定長度的密碼編譯演算法,比如AES要求被加密資料一定是128位(16位元組)長。這個1024不是碰巧,而是 Sqlite 的頁定義是1024位元組,在sqlite3.c檔案裡有定義:

複製內容到剪貼簿

代碼:

# define SQLITE_DEFAULT_PAGE_SIZE 1024

你可以改動這個值,不過還是建議沒有必要不要去改它。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.