手機遊戲當中的數據存儲是一個重要的課題。cocos2d-x發展到如今的版本2.1.4,已經直接實現了對sqlite的支持(extensions/LocalStorage),這對咱們通常的數據存儲已經夠用了。不過sqlite存儲的數據是明文的,不管是誰均可以輕易破解。所以咱們須要一種方法對數據進行加密。萬幸的是,已經有人爲咱們提供了很方便的庫來完成這個工做。這個項目的網站是<a target="_blank" href="http://sqlcipher.net/>http://sqlcipher.net/"這裏簡單記錄一下將其整合到cocos2d-x的步驟。java
cocos2d-x調用sqlite存儲數據的類是extensions/LocalStorage,在android上是LocalStorageAndroid,後者是使用JNI實現的。調用自己是很簡單的,同時在cocos2d-x js binding中也實現了綁定,能夠在js層直接完成存取操做。android
sqlcipher項目的加密算法是openssl,使用方法是在建立和生成sqlite數據庫時加入一個密碼。ios
根據http://sqlcipher.net/ios-tutorial/能夠嵌入sqlcipher項目。下面簡單重現一下步驟。git
openSSLgithub
http://www.openssl.org/source/openssl-1.0.0e.tar.gz算法
SQLCiphersql
git clone https://github.com/sqlcipher/sqlcipher.git數據庫
openSSL-Xcodexcode
git clone https://github.com/sqlcipher/openssl-xcode.gitmarkdown
target Dependencies
link binary with libraries
這裏記得要去掉libsqlite3.dylib
首先是searchpath,記住要選擇recursive,不然會編譯失敗
增長C Flags
若是之前已經存儲過sqlite文件,那麼必須刪除sqlite文件才能正常使用。ios模擬器的存檔文件是在
android中實際使用的是localStorageAndroid。一樣的咱們能夠在如下網址看到使用方法http://sqlcipher.net/sqlcipher-for-android/
簡單步驟
https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+2.2.0.zip
刪除不須要的文件後大概應該是這個樣子
在assets裏面是icudt46l.zip
把幾個jar包複製到libs目錄下,而且在java build path中增長它們。
而後在build_native.sh裏面增長把幾個so複製到包裏的操做。(由於cocos2dx編譯的時候會刪除掉libs/armeabi目錄,直接複製進去是不行的)
SQLCIPHER="/Users/bigbang003/develop/third-sdks/SQLCipher" cp -rf $SQLCIPHER/libs/armeabi/* "$APP_ANDROID_ROOT"/libs/armeabi cp -rf $SQLCIPHER/assets/icudt46l.zip "$APP_ANDROID_ROOT"/assets
修改的方式大體以下