精华内容
下载资源
问答
  • cocos2dx lua 加密

    2019-09-25 21:59:23
    cocos2dx-lua项目发布时,为了保护lua源码,需要对lua进行加密。通常分为两种方式:加密文件和编译为字节码... (1)确立加密算法,并实现批量加密的工具。  (2)实现文件读取时解密,并调用lua解释器加载解密后...

    cocos2dx-lua项目发布时,为了保护lua源码,需要对lua进行加密。通常分为两种方式:加密文件和编译为字节码。

    1、加密文件

      前提是你不用luajit,而使用lua。这样这种方法是真正加密,原理是我们自己替换掉lua的的loader函数。通常需要以下几个步骤:

      (1)确立加密算法,并实现批量加密的工具。

      (2)实现文件读取时解密,并调用lua解释器加载解密后模块。

     

    2、编译成字节码。

      这种其实并不是真正意义上的加密,而是用luajit把lua脚本编译成字节码。反编译?!

      因为目前项目的cocos2dx使用了luajit,所以使用编译方式隐藏源码。主要步骤:

      (1)打开终端,进入 cocos2dx自带的luajit路径:你的cocos2d-x路径/scripting/lua/luajit/LuaJIT-2.0.1。

      (2)运行命令:sudo make install。这样安装后,可以直接在命令行使用luajit来编译lua文件。

      (3)运行命令:luajit -b 你的lua文件 你要生成的字节码文件

     

    这里有一个批量编译的脚本。http://www.it165.net/pro/html/201403/10527.html

     

    转载于:https://www.cnblogs.com/dongzee/p/3604781.html

    展开全文
  • Quick-Cocos2d-x 为开发者提供了xxtea加密算法,用来对脚本文件及资源进行加密,加密对象大体分为如下几种: 1. 对脚本/资源文件本身加密 2. 将脚本/资源文件压缩成zip,对zip进行加密 3. 对脚本/资源文件加密后...

    如果开发者不想让游戏中的资源或脚本文件轻易的暴露给其他人,一般会采用对文件进行加密的方式来保护文件或资源被盗用。Quick-Cocos2d-x 为开发者提供了xxtea加密算法,用来对脚本文件及资源进行加密,加密对象大体分为如下几种:

    1. 对脚本/资源文件本身加密

    2. 将脚本/资源文件压缩成zip,对zip进行加密

    3. 对脚本/资源文件加密后,再将其压缩后的zip再次加密

    首先来演示对脚本文件的加密

    1. 创建一个新工程,名为quicktest。

    通过控制台进入到该工程目录下,例:

    cd /Users/Helloworld/Desktop/quick-cocos2d-x-2.2.5/bin/quicktest

    2. 执行 compile_scripts.sh脚本(位于quick-cocos2d-x-2.2.5/bin文件夹下。windows下执行.bat),执行时需要输入若干个参数,这里简单介绍一下各个参数的功能(也可以直接查看对应的php脚本文件或输入-h查看帮助):

    • -h 帮助

    • -i  源文件目录

    • -o 输出文件目录/输出文件名

    • -p 包前缀名字

    • -x  不包含的包,即当前目录下的哪些包不希望被添加进去

    • -m 编译模式,包含两种,一种是默认的打包成zip,另外一种是不打包直接生成一个个的文件

    • -e 加密模式,包含两种,xxtea_chunk是对文件本身进行加密,xxtea_zip是对打包后的zip进行加密

    • -ek 加密秘钥

    • -es 加密签名

    • -ex 加密文件的后缀名,默认是lua

    • -c 从一个文件加载参数列表

    • -q 生成过程不输出信息

     

    例:

    /Users/Helloworld/Desktop/quick-cocos2d-x-2.2.5/bin/compile_scripts.sh -i scripts -o res/game.zip -e xxtea_zip -ek MYKEY -es XT

    上面这段代码的作用,是将 scripts 文件夹中的脚本文件压缩,并存放到res目录下,压缩后的文件名为game.zip,加密方式采用的是对zip压缩包进行加密,如果采用文本方式加密则-e 后应该写 xxtea_chunks。秘钥和签名将会在代码中使用。操作完整截图如下:

    下面打开quick-cocos2d-x/bin/quicktest/res ,可以看到里面有两个压缩包,其中framework_precompiled.zip是引擎自带的,而另外一个则是我们刚刚生成的,双击game.zip之后你会发现解压出来的是一个game.zip.cpgz的文件,然后双击这个.cpgz的文件之后又会生成game.zip文件,原因是这个zip已经被加密,所以无法识别了。如果这里采用的是脚本加密的方式或不加密的方式则可以正常解压。

     

    之后在引擎中使用加密后的脚本文件时,只需将AppDelegate.cpp中原本执行脚本文件的那段代码替换为如下代码:

    pStack->setXXTEAKeyAndSign("MYKEY", 5, "XT", 2);
    pStack->loadChunksFromZIP("res/game.zip");
    pStack->executeString("require 'main'");

    其中第一行代码中的5和2代表的是字符串"MYKEY"和"XT"的字符个数为5和2。

     

    脚本加密的方式大体如上文所述,至于资源加密的方法与脚本加密类似,在进入quicktest目录下之后执行pack_files.sh脚本(win执行pack_files.bat)。输入-h查看帮助

    第一个样例,是将res中的资源文件进行加密,加密后的文件存放到resnew文件夹中;第二个是讲res中的资源打包成zip存放到game.zip,并未加密;第三个是存放到zip中后并对zip进行加密。还有另外一种方式就是两种方法结合使用,将资源加密后存放到某一文件夹,之后再重新执行一次脚本将这些加密后的文件打包成zip再加密。

    之后还需要在AppDelegate.cpp中加一段代码:

    pStack->setXXTEAKeyAndSign("XXTEA", 5,"tsts",4);

    如果将资源压缩成了zip包,还需再加一行代码:

    pStack->loadChunksFromZip("picture.zip");

    如此便可以成功运行了,打包时在项目的资源中仅保留.zip即可,原本的资源及脚本直接删除其引用即可,源文件千万不要删掉。

    还有一点需要说明的是,该方法并非只能对Quick-x中的资源加密,比如,如果开发者使用的是Cocos2d-x 2.2.5的版本,但是却希望使用Quick-x中的加密方法对资源及脚本进行加密,这样也是可以的。加密的步骤与上述相同,但由于Cocos2d-x v2.2.5并没有相关的解密算法,所以需要修改若干文件方可正常使用,笔者修改后已测试成功,这里简单描述需要修改的内容。

     

    Quick-x 脚本及资源加解密方法修改文件(具体修改的地方对比一下就知道了)

    一、资源解密修改

    1.修改cocos2dx/platform/ios/CCImage.mm文件

    2.增加文件 apptools 到 extensions 文件夹

    3.给cocos2dx.xcodeproj添加header search path  : "$(SRCROOT)/../../extensions"

    (注:这里笔者将apptools添加到了extensions文件夹只是为了方便,其实添加到其它位置也并非不可以。这里面涉及到了一点问题,因为cocos2dx的库文件位于cocos2dx.xcodeproj工程中,而lua库位于另外一个工程,但这一点在quick-x中不一样,在quick-x中这两个库文件都位于同一个工程,所以它们之间引用不存在问题,但是在cocos2d-x 2.2.5中便存在了不同工程间的文件引用问题,所以笔者此处做了2,3步的修改)。

     

    二、脚本解密修改

    1.修改lua/cocos2dx_support/CCLuaStack.h  .cpp 文件

    2.增加 xxtea文件 目录 cocos2dx/support/xxtea.h  xxtea.c  

    3.增加 CCZipFile.h .cpp文件 目录 cocos2dx/platform/CCZipFile.h  .cpp  

    4.修改 unzip.h .cpp文件 目录cocos2dx/support/zip_support/unzip.h  .cpp 

    5.增加 loapi_mem.h .cpp文件 目录 cocos2dx/support/zip_support/loapi_mem.h .cpp 

     

    修改成功后,在Cocos2d-x v2.2.5中也可以使用该加密方法了。

    转载于:https://www.cnblogs.com/damowang/p/4940084.html

    展开全文
  • lua字符串加密

    2018-01-17 18:38:27
    lua md5加密 算法适用于lua开发,字符串加密,游戏开发等
  • package main import ( "fmt" "strconv" "strings" ) func encryptData(code_data string, callback_key string) string { dataArr := []rune(code_dat...
    package main
    
    import (
    	"fmt"
    	"strconv"
    	"strings"
    )
    
    func encryptData(code_data string, callback_key string) string {
    	dataArr := []rune(code_data)
    	keyArr := []byte(callback_key)
    	keyLen := len(keyArr)
    
    	var tmpList []int
    
    	for index, value := range dataArr {
    		base := int(value)
    		dataString := base + int(0xFF&keyArr[index%keyLen])
    		tmpList = append(tmpList, dataString)
    	}
    
    	var str string
    
    	for _, value := range tmpList {
    		str += "@" + fmt.Sprintf("%d", value)
    	}
    	return str
    }
    
    func decryptData(nt_data string, callback_key string) string {
    	strLen := len(nt_data)
    	newData := []rune(nt_data)
    	resultData := string(newData[1:strLen])
    	dataArr := strings.Split(resultData, "@")
    	keyArr := []byte(callback_key)
    	keyLen := len(keyArr)
    
    	var tmpList []int
    
    	for index, value := range dataArr {
    		base, _ := strconv.Atoi(value)
    		dataString := base - int(0xFF&keyArr[index%keyLen])
    		tmpList = append(tmpList, dataString)
    	}
    
    	var str string
    
    	for _, val := range tmpList {
    		str += string(rune(val))
    	}
    	return str
    }
    
    func main() {
    	testData := "#test %data _code$@这是一个简单的测试示例===*******~!@#¥%……&*()——+"
    	testKey := "test! key"
    
    	encode := encryptData(testData, testKey)
    	fmt.Println(encode)
    	decode := decryptData(encode, testKey)
    	fmt.Println(decode)
    }
    

     

    
    class cryptDataClass:
    
    	def getByte(self, data):
    		tmp = [];
    		for s in data:
    			tmp.append(ord(s));
    		return tmp;
    		
    	def getChars(self, byte):
    		str = '';
    		for n in byte:
    			str += chr(n);
    		return str;
    		
    	def encryptData(self, data, keys):
    		tmpList = [];
    		dataArr = self.getByte(data);
    		keyArr = self.getByte(keys);
    		keyLen = len(keyArr);
    		for index,value in enumerate(dataArr):
    			tmpList.append(str((0xFF & value) + (0xFF & keyArr[index % keyLen])));
    		return "@" + "@".join(tmpList);
    	
    	def decryptData(self, data, keys):
    		tmpList = [];
    		dataArr = data.split("@");
    		del(dataArr[0]);
    		keyArr = self.getByte(keys);
    		keyLen = len(keyArr);
    		for index,value in enumerate(dataArr):
    			tmpList.append(int(value) - (0xFF & keyArr[index % keyLen]) );
    		return self.getChars(tmpList);
    		
    		
    
    data = '#test %data _code$@这是一个简单的测试示例===*******~!@#¥%……&*()——+';
    key = 'test! key';
    cc = cryptDataClass();
    endata = cc.encryptData(data, key);
    print endata;
    dedata = cc.decryptData(endata, key)
    print dedata;

     

    require('bit32')
    require('string')
    
    function getByte(data, flag)
        local array = {}
        local lens = string.len(data)
        if (flag == false)
        then
            for i=1,lens do
                array[i] = string.byte(data, i)
            end
            return array
        else
            for i=1,lens do
                array[i-1] = string.byte(data, i)
            end
        end
        return array,lens
    end
    
    function getChars(bytes)
        local array = {}
        for key, val in pairs(bytes) do
            array[key] = string.char(val)
        end
        return array
    end
    
    function encryptData(data, keys)
        local result = ""
        local dataArr = getByte(data, false)
        local keyArr,keyLen = getByte(keys, true)
        for index,value in pairs(dataArr) do
            result = result.."@"..tostring((0xFF and value) + (0xFF and keyArr[(index-1) % keyLen]))
        end
        return result
    end
    
    function decryptData(data, keys)
        local result = ""
        local dataArr = string.split(data, '@')
        local keyArr,keyLen = getByte(keys, true)
        for index,value in pairs(dataArr) do
              bytes =  tonumber(value) - (0xFF and keyArr[(index-1) % keyLen])
              result = result..string.char(bytes)
        end
        return result
    end
    
    function string.split( str,reps )
        local resultStrList = {}
        string.gsub(str,'[^'..reps..']+',function ( w )
            table.insert(resultStrList,w)
        end)
        return resultStrList
    end
    
    
    local data = '#test %data _code$@这是一个简单的测试示例===*******~!@#¥%……&*()——+'
    local key = 'test! key'
    
    ss = encryptData(data, key)
    print(ss)
    
    ff = decryptData(ss, key)
    print(ff)

     

    转载于:https://my.oschina.net/andyhua/blog/1798504

    展开全文
  • MD5加密算法源码.rar

    2020-04-10 13:51:30
    MD5加密算法源码,包涵源代码以及makefile文件。根据代码学习以及编译为.so文件在lua c等作为模块以用,可以用作MD5加密。
  • lua代码加密策略

    千次阅读 2018-10-28 03:20:31
    1、使用类似cocos的加密方式,对文件打上加密...2、luac编译后使用,luac编译后的代码,采用工具能够恢复一部分,可读性不强,可以作为一般应用的加密方式 3、将加密解密的函数,由服务端传入。客户端执行这个函数...

    1、使用类似cocos的加密方式,对文件打上加密标记头,然后文件内容呢,加密后存放。需要修改lua加载文件的部分代码。
    安全性:基于算法保密+密钥保密,对于很多cocos程序来说,密钥是写死在代码里,所以通过反编译代码很容易获取到

    2、luac编译后使用,luac编译后的代码,采用工具能够恢复一部分,可读性不强,可以作为一般应用的加密方式

    3、将加密解密的函数,由服务端传入。客户端执行这个函数加载相应模块。需要封装读取文件接口给LUA用。
    这种方式,非常隐蔽

    4、修改lua虚拟机中,指令的编号,然后使用luac进行编译。这样的方式luac编译后的字节码中,指令编号与其它的不同,是非常好的机密方式。
    注意的是,不要采用未修改的luac编译好的其它文件,因为修改了指令编号,解析的时候会出错。

    展开全文
  • luajit lua文件加密工具

    千次阅读 2014-11-10 15:10:50
    cocos2dx-lua项目发布时,为了保护lua源码,需要对lua进行加密。通常分为两种方式:加密文件和编译为... (1)确立加密算法,并实现批量加密的工具。  (2)实现文件读取时解密,并调用lua解释器加载解密后模块。
  • lua之base64加密和解密算法

    千次阅读 2018-07-24 11:32:17
    local function encodeBase64(source_str) local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' local s64 = '' local str = source_str while #str &...
  • lua rc4算法实现

    2014-07-24 01:05:00
    由于项目需要,用python django写restful接口遇到瓶颈,python django+uwsgi处理请求是会阻塞的, 如果阻塞请求不及时处理,会卡住越来越多的其它的请求,导致... 项目因用到rc4加密算法,但网上实现lua rc4算法的...
  • Cocos2d-x的lua官方加密的解密方法

    千次阅读 2019-04-27 14:26:09
    Cocos2d-x对于lua脚本加密提供了一种轻量级解决方案,加密算法是xxtea,下面是这个打包脚本cocos2d.py加密参数的说明 主要就是两个部分,sign和key,sign是加密标记,用于判断脚本是否加密,key是xxtea解密时候的...
  • 安全加密总结 ...核心使用了位移和替换算法,(这种方式...例如原文为abcd、流加密先对a加密、再对b加密、再对c加密、再对d加密,最后吧加密后的数据拼接组成密文。块加密先对原文分块比如abc 作为第一块、然后d+xx+xx为第
  • coco2d-x 文件加密lua、xml)

    千次阅读 2013-09-17 12:15:57
    最近发现很多朋友需要...往往一个加密算法都对应了一个解密算法,你只要在你的工程里面用到这个文件的时候(工程里面用这些文件的时候都是先把文件读取到内存的,这个应该都懂),文件读取到内存后先把它解密一下然后
  • 由于项目中使用加密算法,但是接口是php写的,需要使用lua编写业务,提供加密结果给php, 先看php的代码  // 获取PEM文件 $pubKey = file_get_contents(dirname(__FILE__).'/public_key.pem');  // 通过xxx函数...
  • lua+cocos2dx项目中需要对脚本文件和图片等文件加密,因为cocos2dx自带了xxtea算法解密操作,所以写了一个自动化加解密工具,能够对整个文件夹中的对应格式文件加密/解密。工具及源码(c++)下载地址:百度网盘。
  • v0.6.1 新增自动校验md5更新游戏资源算法 v0.6.2 新增Loom线程管理类/回调函数执行类 v0.6.3 新增Setting 系统设置类 v0.6.4 更新AssetLoader模块,完善了ab包的读取与资源加载 LuaMVC Beta 1.0 版本更新说明 ...
  • aes256.lua

    2019-06-06 17:41:46
    openresty默认的加密算法aes.lua其实是不支持aes256ecb加解密的,这个是对aes256ecb算法实现的补充,可放入openresty目录下包含之后使用
  • AES Everywhere是跨语言加密库,它提供了使用单一算法在不同编程语言和不同平台上对数据进行加密和解密的功能。 这是AES算法(特别是CBC模式)的实现,具有256位密钥长度和PKCS7填充。 它使用随机生成的盐实现与...
  • lua ffi.string

    千次阅读 2018-06-07 09:11:02
    缘起使用ffi给lua包一个rsa算法, 刚刚学习ffi,连文档都没仔细看过,当返回加密结果时,如果直接返回CDATA,则解密没有问题,如果转为lua string(使用ffi.string) ,则后续无法解密调试直接在lua中调试基本无法凑...
  • LuaSeel是使用字节码加密的简单lua混淆器。 指示 转到lua在线执行器(即repl.it,lua演示等)。 复制并粘贴此脚本到执行程序中: : 转到第2行,并将其替换为您要混淆的脚本。 执行脚本,混淆的脚本将出现在输出...
  • 一、概述 ...考虑到加密算法和压缩算法的复杂性,采用调用lua C库的方法,完成解密(解压)。 下面与大家分享下大致思路。 二、目标及思路 协议的大致格式如下: 协议字段 命名 ...
  • 应项目需求,需要一套xsalsa20实现的加密算法。如果直接用lua实现一套,既浪费精力,又影响性能,总所周知直接使用LuaJIT的FFI方式,可直接调用c语言实现的函数。 经过网上调研,可直接调用libsodium中内置的加密...
  • 原来的jdk8版本如果不替换jce就会在发邮件的过程中报错,而此次使用的jdk1.8.0_131,并没有出现问题,也就是...就不用考虑发邮件因为加密算法而导致的错误了 转载于:https://www.cnblogs.com/LUA123/p/7041440.html...
  • hmacsha256.zip

    2020-03-11 17:58:01
    hmacsha256加密算法lua版本,接入闲聊机器人可用到。hmacsha256加密算法lua版本,接入闲聊机器人可用到。hmacsha256加密算法lua版本,接入闲聊机器人可用到。
  • Zenroom是Lua和它自己的安全域特定语言(DSL)的安全语言解释器,可使用椭圆曲线算法执行快速密码运算。 Zenroom VM非常小,没有外部依赖性,具有完全确定性,可以在任何平台上运行端到端加密:台式机,嵌入式,...
  • 你真的了解模运算吗?

    2017-07-14 20:49:36
    问题假设我们需要编写一个字母表右移映射的程序(可能用于实现某种加密算法),说起来似乎有些抽象,举个例子便清晰了:譬如字母表为 { ‘a’, ‘b’, ‘c’, ‘d’, ‘e’ }, 右移3位的话, 字母表便被映射为 { ‘d’, ...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

lua加密算法