Sqlcipher-android添加国密算法的⽀持
Sqlcipher-android添加国密算法的⽀持
Sqlcipher默认使⽤的Openssl加密库的AES256的加密算法,由于项⽬需求需要替换成国密算法.
Sqlcipher⽀持三种加密库:
- Openssl库
- LibTomCrypt库
- crypto++库
1.OpenSSL :C语⾔实现,⽀持跨平台。代码量⽐较庞⼤,经过很多次调整,⽬前的结构不再清晰明了,要代码剥离的话⾮常痛苦,使⽤起来不是很⽅便。
2. Crypto++:C++语⾔实现,代码庞⼤且复杂,使⽤起来不⽅便。⽀持跨平台。
3. LibTomCrypt:短⼩精⼲,结构清晰明了,速度中等。适合初学密码学的学⽣和期望对密码学有进⼀步了解的⼈⼠。名⽓和使⽤⼴泛性不如OpenSSL和Crypto++。
sqlite3.c:
#if !defined (SQLCIPHER_CRYPTO_CC) \
&& !defined (SQLCIPHER_CRYPTO_LIBTOMCRYPT) \
&& !defined (SQLCIPHER_CRYPTO_OPENSSL)
#define SQLCIPHER_CRYPTO_OPENSSL
默认是选择openssl加密库,如果要选择Crypto++或者LibTomCrypt库,在Android.mk中添加
LOCAL_CFLAGS +=  -DSQLCIPHER_CRYPTO_LIBTOMCRYPT
或者
LOCAL_CFLAGS +=  -DSQLCIPHER_CRYPTO_CC
在这⾥我还是选择OpenSSL,因为openssl最新版本已经添加了国密算法.OpenSSL版本选择OpenSSL_1_1_1-pre1.
环境
Android-database-sqlcipher 3.5.9
OpenSSL_1_1_1-pre1
sqlcipher 3.20.1
NDK
jdk
Git
Android SDK
Ubuntu
环境变量
sudo gedit ~/.bashrc
export ANDROID_NDK_ROOT=~/Android/ndk-bundle
export ANDROID_NDK=~Android/ndk-bundle
export GCC=~/Android/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
export ANDROID_HOME=~/Android/
export JAVA_HOME=~/jdk1.8.0_171  (以上配置具体路径修改为⾃⼰的相应的路径)
source ~/.bashrc  注意:以上不要在su命令下配置,以及之后的所有操作都不要在su命令下
git clone github/sqlcipher/android-database-sqlcipher.git
git submodule update --init  ⽹络⽐较慢,要等很久,没有进度,只能⼀直等,是下载sqlcipher源码和openssl1.1.0g
下载openssl1.1.1-pre1,然后替换android-database-sqlcipher/android-database-sqlcipher/src/main/external/openssl 启⽤openssl和sqlcipher⽇志打印功能
如果要启⽤⽇志打印功能,需要修改两个地⽅
1.
Android.mk
LOCAL_CFLAGS +=  $(SQLCIPHER_CFLAGS)  -DLOG_NDEBUG
如果要启⽤⽇志打印,就去掉-DLOG_NDEBUG
2.
sqlite3.c
添加#define CODEC_DEBUG 113
调试完成后恢复就OK了.
sqlcipher替换加密算法
原始的sqlite3.c
#ifndef CIPHER
#define CIPHER "aes-256-cbc"
#endif
修改后的sqlite3.c
#ifndef CIPHER
#define CIPHER "sm4-cbc"
#endif
参数配置
adle
配置最低⽀持Android版本和最低⽀持Android64位版本
minimumAndroidSdkVersion = 14
minimumAndroid64BitSdkVersion = 21
targetAndroidSdkVersion = 24
过滤,提⾼编译速度
如果不需要编译64位的库,可以在adle⽂件注释掉
android最新版
executeNdkBuild(
"${nativeRootOutputDir}/libs64",
file("src/main/cpp").absolutePath,
file("src/main/cpp/Application64.mk").absolutePath,
"${sqlcipherCFlags}")
编译openssl静态库时如果有些架构的不需要,可以在build-openssl-libraries.sh
for SQLCIPHER_TARGET_PLATFORM in armeabi armeabi-v7a x86 x86_64 arm64-v8a
中删除不需要的架构
Application32.mk和Application64.mk中
APP_ABI := armeabi armeabi-v7a x86 中删除不需要的架构
在项⽬根⽬录输⼊ make build

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。