Android JNI環境要SQLite加密模組簡介

來源:互聯網
上載者:User

標籤:

免費的SQLite開源原始碼僅僅給提供了兩個函數,僅僅有實現這兩個函數才幹實現資料庫總體加密。

然後廢了點勁從網上找了一個已經實現好的開源庫http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/ 
然後大概寫一下怎樣把它整合到自己的so庫中。

首先下載原始碼,找到sqlite3/secure/src下,把當中全部的檔案(除了sqlite3.def)複製到Androidproject下的jni檔案夾下,然後開啟sqlite3.c檔案。在最前面加入一行代碼:

#define SQLITE_HAS_CODEC

在jni檔案夾下建立Android.mk檔案,輸入例如以下內容:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)  LOCAL_MODULE:= libsqlite3 LOCAL_SRC_FILES:= sqlite3secure.c #這裡寫的是相對路徑include $(BUILD_STATIC_LIBRARY)  # 從這裡開始是so庫的聲明,我這裡使用了一個自己主動載入指令碼。僅僅須要指定# MY_FILES_PATH就能自己主動載入全部的cpp和c檔案include $(CLEAR_VARS)LOCAL_MODULE    := nativeMY_FILES_PATH  := $(LOCAL_PATH)/ClassesMY_FILES_SUFFIX := %.cpp %.c# 遞迴遍曆檔案夾下的全部的檔案rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))# 擷取對應的源檔案MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) ) MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)MY_SRC_LIST  := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES)) MY_SRC_LIST  := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)# 去除字串的反覆單詞define uniq =  $(eval seen :=)  $(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))  ${seen}endef# 遞迴遍曆擷取全部檔案夾MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) )MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS))#MY_ALL_DIRS :=     # 賦值給NDK編譯系統LOCAL_SRC_FILES  := $(MY_SRC_LIST)LOCAL_C_INCLUDES := $(MY_ALL_DIRS)LOCAL_LDLIBS := -llog -ldlLOCAL_STATIC_LIBRARIES := libsqlite3 # 這裡加入靜態庫include $(BUILD_SHARED_LIBRARY)

在使用的時候,僅僅須要

#include "sqlite3.h"

然後在open資料庫之後,調用例如以下兩個函數:

SQLITE_API int sqlite3_key(  sqlite3 *db,                   /* Database to be rekeyed */  const void *pKey,              /* The key */  int nKey                       /* The key length */);SQLITE_API int sqlite3_key_v2(  sqlite3 *db,                   /* Database to be rekeyed */  const char *zDbName,           /* Name of the database */  const void *pKey,              /* The key */  int nKey                       /* The key length */);

就可以將資料庫加密。 
須要注意的是。僅僅能在建立資料庫後立即調用以上兩個函數中的隨意一個才幹加密資料庫。當須要操作一個加密後的資料庫後,僅僅須要在open該功能資料庫之後調用一次,它可以是資料庫的正常操作。

著作權聲明:本文博主原創文章。部落格,未經同意不得轉載。

Android JNI環境要SQLite加密模組簡介

聯繫我們

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