先不用管上面的编译错误,创建crypt.c和crypt.h,用来实现加密解密函数和相应接口的定义。
crypt.c里实现了加密解密函数,代码如下:
#include "crypt.h" #include "memory.h"
/*********** 关键加密函数 ***********/ int My_Encrypt_Func(unsigned char * pData, unsigned int data_len, unsigned char * key, unsigned int len_of_key)
{ unsigned int i; unsigned char bit, val;
for (i = 0; i < data_len; i++) { val = ~(*pData); *pData = val; pData++; } return 0; }
/*********** 关键解密函数 ***********/ int My_DeEncrypt_Func(unsigned char * pData, unsigned int data_len, unsigned char * key, unsigned int len_of_key)
{ unsigned int i; unsigned char bit, val;
for (i = 0; i < data_len; i++) { val = ~(*pData); *pData = val; pData++; } return 0; } |
这里加密解密函数就是简单的采用了求反的操作,目的是用来演示加密和解密。以后实际运用中把这两个函数内的算法修改为自己的加密解密算法即可。
注意:这里的加密解密函数实际上没有用到Key值,因此加密后使用任意Key值均可以解开数据库,但是加密后,用第三方工具是不能直接打开的。
crypt.h用来声明加密解密函数的定义,以便sqlite3.c包含加密解密接口,代码如下:
/** * 加密函数 */ int My_Encrypt_Func(unsigned char * pData, unsigned int data_len, unsigned char * key, unsigned int len_of_key);
/** * 解密函数 */ int My_DeEncrypt_Func(unsigned char * pData, unsigned int data_len, unsigned char * key, unsigned int len_of_key); |
注意:网上的代码中,参数key定义为“const char *”类型,与sqlite3.c代码一起编译时会有错误,这里按照sqlite3.c中的类型修改为“unsigned char *”类型。