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"

 

现代的高级加密则是和密钥配对,这个东西挺复杂的,我也懒得看了,下面提供几个百科

RSA算法MD5算法Des算法Base64算法

俗话说“卤水点豆腐,一物降一物”,无论你怎么加密都有破解之道的,除非采用传说中的量子加密

(记得以前看过一篇科普,据说量子加密具有不可逆,而且你也不能拦截信息,如果拦截收到方

就会发现。)

于是,我便采用了简单点的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"))

 

posted @ 2013-03-24 22:32  半山th  阅读(885)  评论(0编辑  收藏  举报