cocos2d-x中使用可加密Sqlite存储玩家数据

 


手机游戏当中的数据存储是一个重要的课题。cocos2d-x发展到现在的版本2.1.4,已经直接实现了对sqlite的支持(extensions/LocalStorage),这对我们一般的数据存储已经够用了。不过sqlite存储的数据是明文的,无论是谁都可以轻易破解。因此我们需要一种方法对数据进行加密。万幸的是,已经有人为我们提供了很方便的库来完成这个工作。这个项目的网站是<a target="_blank" href="http://sqlcipher.net/>http://sqlcipher.net/"这里简单记录一下将其整合到cocos2d-x的步骤。

调用机制

cocos2d-x调用sqlite存储数据的类是extensions/LocalStorage,在android上是LocalStorageAndroid,后者是使用JNI实现的。调用本身是很简单的,同时在cocos2d-x js binding中也实现了绑定,可以在js层直接完成存取操作。

sqlcipher项目的加密算法是openssl,使用方法是在创建和生成sqlite数据库时加入一个密码。

IOS版本的嵌入方法

根据http://sqlcipher.net/ios-tutorial/可以嵌入sqlcipher项目。下面简单重现一下步骤。

下载所需依赖

openSSL

http://www.openssl.org/source/openssl-1.0.0e.tar.gz

SQLCipher

git clone https://github.com/sqlcipher/sqlcipher.git

openSSL-Xcode

git clone https://github.com/sqlcipher/openssl-xcode.git

在xcode中增加sourceTree

在项目中增加子项目

在项目->target->build parse中增加依赖

target Dependencies

link binary with libraries

这里记得要去掉libsqlite3.dylib

设置build-settings

首先是searchpath,记住要选择recursive,否则会编译失败

增加C Flags

在项目的C++代码中使用密码

注意事项

如果以前已经存储过sqlite文件,那么必须删除sqlite文件才能正常使用。ios模拟器的存档文件是在

android嵌入

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

最后修改Cocos2dxLocalStorage.java

修改的方式大致如下


 

posted @ 2013-08-10 00:03  jlins  阅读(3018)  评论(0编辑  收藏  举报