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
修改的方式大致如下
cocos2d-x中使用可加密Sqlite存储玩家数据的更多相关文章
- Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)
系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe ...
- 浅谈利用SQLite存储离散瓦片的思路和实现方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联 ...
- Infinispan 8 中新的 Redis 缓存存储实现
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/147.html nfinispan 8 包含了一个新的在 Redis k/ ...
- ASP.NET中的MD5加密
新人冒泡,打今起在园子里算是开博了,先来写点关于基础性的东西 为以后的写其他的文章做准备. 今天就先来说说MD5加密与在ASP.NET中如何实现MD5加密. MD5加密简单的说就是把一段明文 通过某种 ...
- Oracle中对列加密的方法
Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...
- [ Android 五种数据存储方式之三 ] —— SQLite存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使用了 ...
- [转]浅谈利用SQLite存储离散瓦片的思路和实现方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联 ...
- ASP.NET中几种加密方法
下面就是ASP.NET中几种加密方法.加密算法有两种,也就是上面提到的MD5和SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样. MD5的全称是Message-Digest ...
- java工具类学习,系统中用户密码加密总结
现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能. 这有利于项目的快速完成,只需要搬砖码畜们专注于业 ...
随机推荐
- [GO编程]GO编程环境
GO是一个开源项目,由Google大神发明的,他主要是用于应用程序级开放,可以编译成机器码,和C++一样不需要.NET或JAVA那样的运行框架,因此是个不错的编程语言.更何况发明者都是高手中的高手,而 ...
- IIS下使用appcmd批量搭建网站
使用 cmd 运行如下命令 > %windir%\system32\inetsrv\appcmd list site /config /xml > d:\sites.xml 修改 d 盘 ...
- [转] 配置Log4j
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- [leetcode] Min Stack @ Python
原题地址:https://oj.leetcode.com/problems/min-stack/ 解题思路:开辟两个栈,一个栈是普通的栈,一个栈用来维护最小值的队列. 代码: class MinSta ...
- HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
当按下一个按钮时,想打开一个新的标签页,可以使用window.open去实现但是因为使用window.open在新窗口或者新标签页中打开页面,有可能被浏览器给拦截.为了解决这个问题,可以模拟链接被按下 ...
- python数据结构之栈、队列的实现
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...
- CentOS 伪装安装TSA for DB2
DB2 HADR需要额外安装TSA,正常情况下CentOS无法通过安装前验证.会报一个说发行版不支持的错误. 可以通过伪装成RHEL的方式使得正常安装. 修改方式如下 修改/etc/system-re ...
- Windows下msysGit使用及相关配置
Windows下msysGit使用 目前我们git通过ssh进行通信,所以需要你也安装ssh以及将ssh key发给我,省得每次都需要输入用户名和密码 1.创建工程目录 windows下进入msysG ...
- [转] Visual Studio Code behind a proxy
http://www.tuicool.com/articles/jyyIBf3 http://blog.majcica.com/2016/04/07/visual-studio-code-behind ...
- leveldb - 并发写入处理
在并发写入的时候,leveldb巧妙地利用一个时间窗口做batch写入,这部分代码值得一读: Status DBImpl::Write(const WriteOptions& options, ...