love2d杂记5--存档加密
游戏里如何存档是个问题,前几天有网友问到这个问题,我便找了一些资料看了一下。
加密方法有很多,最简单的便是以下三种:
1、移位
比如a--z,每个字母都向后移动3位,这样"hello"加密后就变成了"khoor"了
2、密码表
按指定一个顺序表示,如规定h---w,e---o,l---r,o---l,这样"hello"加密后就成了"worrl"
3、简单的四则运算
比如a--z代表1--26,现在我们做规定x=(x+4)*3%26 ,这样"hello"加密后加变成了"javvq"
现代的高级加密则是和密钥配对,这个东西挺复杂的,我也懒得看了,下面提供几个百科
俗话说“卤水点豆腐,一物降一物”,无论你怎么加密都有破解之道的,除非采用传说中的量子加密
(记得以前看过一篇科普,据说量子加密具有不可逆,而且你也不能拦截信息,如果拦截收到方
就会发现。)
于是,我便采用了简单点的Base64加zip压缩,这样一般的玩家就不能查看存档信息里的内容了。
对ubuntu用户,先下载luarocks,编译好后使用
sudo luarocks install base64 安装或则到此下载源码编译
sudo luarocks install gzio 安装或则到此下载源码编译
对windows在luaforwindows里已经自带,若没安装可以下载我的附件。
代码如下:运行代码后会在当前目录下生成"test/aa.sav"(直接用lua运行)
其中加密的是hello world,你可以直接用记事本打开aa.sav,发现文件全变了。
require "gzio" require "base64" --若没有则创建,msg是内容,mode保存方式 function saveFile(file,msg,mode) mode=mode or "a+" local savFile=assert(gzio.open(file..".sav", mode)) msg=base64.encode(msg .. "\n") --把加密的消息加上换行,这样解密时就自动换行了。 savFile:write(msg .. "\n") --写入文件时加上换行,使用gzio的行读取函数 savFile:close() end --返回消息,若文件没有提示错误 function readFile(file) local savFile = assert(gzio.open(file .. ".sav", "r"), "gzio.open failed!") local msg="" for line in savFile:lines() do msg=msg .. base64.decode(line) end return msg end --测试 saveFile("test/aa","hello ") saveFile("test/aa","world ") print(readFile("test/aa"))
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。