加密

cocos luacompile -s src -d dst_dir -e -b xxxxx -k xxxxx --disable-compile

解密

cocos luacompile -s src -d dst_dir -e -j  -b xxxxx -k xxxxx --disable-compile

说明:cocos默认只支持加密,不支持反向解密, 本人改一下python脚本 使其支持解密。 -b 后面接的参数是在文件中可以见的。

#!/usr/bin/python
# ----------------------------------------------------------------------------
# cocos "luacompile" plugin
#
# Copyright 2013 (C) Intel
#
# License: MIT
# ----------------------------------------------------------------------------'''
"luacompile" plugin for cocos command line tool
'''__docformat__ = 'restructuredtext'import sys
import subprocess
import os
import json
import inspect
import shutilimport cocos
from MultiLanguage import MultiLanguage############################################################
#http://www.coolcode.org/archives/?article-307.html
############################################################ import struct _DELTA = 0x9E3779B9  def _long2str(v, w):  n = (len(v) - 1) << 2  if w:  m = v[-1]  if (m < n - 3) or (m > n): return ''  n = m  s = struct.pack('<%iL' % len(v), *v)  return s[0:n] if w else s  def _str2long(s, w):  n = len(s)  m = (4 - (n & 3) & 3) + n  s = s.ljust(m, "\0")  v = list(struct.unpack('<%iL' % (m >> 2), s))  if w: v.append(n)  return v  def encrypt(str, key):  if str == '': return str  v = _str2long(str, True)  k = _str2long(key.ljust(16, "\0"), False)  n = len(v) - 1  z = v[n]  y = v[0]  sum = 0  q = 6 + 52 // (n + 1)  while q > 0:  sum = (sum + _DELTA) & 0xffffffff  e = sum >> 2 & 3  for p in xrange(n):  y = v[p + 1]  v[p] = (v[p] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  z = v[p]  y = v[0]  v[n] = (v[n] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff  z = v[n]  q -= 1  return _long2str(v, False)  def decrypt(str, key):  if str == '': return str  v = _str2long(str, False)  k = _str2long(key.ljust(16, "\0"), False) n = len(v) - 1  z = v[n]  y = v[0]  q = 6 + 52 // (n + 1)  sum = (q * _DELTA) & 0xffffffff  while (sum != 0):  e = sum >> 2 & 3  for p in xrange(n, 0, -1):  z = v[p - 1]  v[p] = (v[p] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  y = v[p]  z = v[n]  v[0] = (v[0] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff  y = v[0]  sum = (sum - _DELTA) & 0xffffffff  return _long2str(v, True)  #import cocos
class CCPluginLuaCompile(cocos.CCPlugin):"""compiles (encodes) and minifies Lua files"""@staticmethoddef plugin_name():return "luacompile"@staticmethoddef brief_description():# returns a short description of this modulereturn MultiLanguage.get_string('LUACOMPILE_BRIEF')# This is not the constructor, just an initializatordef init(self, options, workingdir):"""Arguments:- `options`:"""self._current_src_dir = Noneself._src_dir_arr = self.normalize_path_in_list(options.src_dir_arr)self._dst_dir = options.dst_dirif not os.path.isabs(self._dst_dir):self._dst_dir = os.path.abspath(self._dst_dir)self._verbose = options.verboseself._workingdir = workingdirself._lua_files = {}self._isEncrypt = options.encryptself._isDecrypt = options.decryptself._encryptkey = options.encryptkeyself._encryptsign = options.encryptsignself._bytecode_64bit = options.bytecode_64bitself._luajit_exe_path = self.get_luajit_path()self._disable_compile = options.disable_compileif self._luajit_exe_path is None:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_TOOL_NOT_FOUND'),cocos.CCPluginError.ERROR_TOOLS_NOT_FOUND)self._luajit_dir = os.path.dirname(self._luajit_exe_path)def normalize_path_in_list(self, list):for i in list:tmp = os.path.normpath(i)if not os.path.isabs(tmp):tmp = os.path.abspath(tmp)list[list.index(i)] = tmpreturn listdef get_relative_path(self, luafile):try:pos = luafile.index(self._current_src_dir)if pos != 0:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_SRCDIR_NAME_NOT_FOUND'),cocos.CCPluginError.ERROR_WRONG_ARGS)return luafile[len(self._current_src_dir)+1:]except ValueError:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_SRCDIR_NAME_NOT_FOUND'),cocos.CCPluginError.ERROR_WRONG_ARGS)def get_output_file_path(self, luafile):"""Gets output file path by source lua file"""# create folder for generated fileluac_filepath = ""# Unknow to remove 'c' if self._isDecrypt and luafile.endswith("luac"):relative_path = self.get_relative_path(luafile)[:-1]else:relative_path = self.get_relative_path(luafile)+"c"luac_filepath = os.path.join(self._dst_dir, relative_path)dst_rootpath = os.path.split(luac_filepath)[0]try:# print "creating dir (%s)" % (dst_rootpath)
            os.makedirs(dst_rootpath)except OSError:if os.path.exists(dst_rootpath) == False:# There was an error on creation, so make sure we know about itraise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_MKDIR_FAILED_FMT',dst_rootpath),cocos.CCPluginError.ERROR_PATH_NOT_FOUND)# print "return luac path: "+luac_filepathreturn luac_filepathdef get_luajit_path(self):ret = Nonebit_prefix = "64bit" if self._bytecode_64bit else "32bit"if cocos.os_is_win32():ret = os.path.join(self._workingdir, "bin", bit_prefix, "luajit-win32.exe")elif cocos.os_is_mac():ret = os.path.join(self._workingdir, "bin", bit_prefix, "luajit-mac")elif cocos.os_is_linux():ret = os.path.join(self._workingdir, "bin", bit_prefix, "luajit-linux")print("luajit bin path: " + ret)return retdef compile_lua(self, lua_file, output_file):"""Compiles lua file"""cocos.Logging.debug(MultiLanguage.get_string('LUACOMPILE_DEBUG_COMPILE_FILE_FMT', lua_file))with cocos.pushd(self._luajit_dir):cmd_str = "\"%s\" -b \"%s\" \"%s\"" % (self._luajit_exe_path, lua_file, output_file)self._run_cmd(cmd_str)# TODO# def compress_js(self):def deep_iterate_dir(self, rootDir):for lists in os.listdir(rootDir):path = os.path.join(rootDir, lists)if os.path.isdir(path):self.deep_iterate_dir(path)elif os.path.isfile(path):if os.path.splitext(path)[1] in (".lua" ,".luac"):self._lua_files[self._current_src_dir].append(path)# UNDO# def index_in_list(self, lua_file, l):# def lua_filename_pre_order_compare(self, a, b):# def lua_filename_post_order_compare(self, a, b):# def _lua_filename_compare(self, a, b, files, delta):# def reorder_lua_files(self):def handle_all_lua_files(self):"""Arguments:- `self`:"""skipLen = len(self._encryptsign)cocos.Logging.info(MultiLanguage.get_string('LUACOMPILE_INFO_PROCESS_FILE'))index = 0for src_dir in self._src_dir_arr:for lua_file in self._lua_files[src_dir]:self._current_src_dir = src_dirdst_lua_file = self.get_output_file_path(lua_file)if self._disable_compile:shutil.copy(lua_file, dst_lua_file)else:self.compile_lua(lua_file, dst_lua_file)                   if self._isEncrypt == True:bytesFile = open(dst_lua_file, "rb+")encryBytes = Noneif  self._isDecrypt:encryBytes = decrypt(bytesFile.read()[skipLen:], self._encryptkey)else:encryBytes = encrypt(bytesFile.read(), self._encryptkey)encryBytes = self._encryptsign + encryBytesbytesFile.seek(0)bytesFile.write(encryBytes)bytesFile.close()index = index + 1def run(self, argv, dependencies):""""""self.parse_args(argv)# tipscocos.Logging.warning(MultiLanguage.get_string('LUACOMPILE_WARNING_TIP_MSG'))# create output directorytry:os.makedirs(self._dst_dir)except OSError:if os.path.exists(self._dst_dir) == False:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_MKDIR_FAILED_FMT',self._dst_dir),cocos.CCPluginError.ERROR_PATH_NOT_FOUND)# deep iterate the src directoryfor src_dir in self._src_dir_arr:self._current_src_dir = src_dirself._lua_files[self._current_src_dir] = []self.deep_iterate_dir(src_dir)self.handle_all_lua_files()cocos.Logging.info(MultiLanguage.get_string('LUACOMPILE_INFO_FINISHED'))def parse_args(self, argv):""""""from argparse import ArgumentParserparser = ArgumentParser(prog="cocos %s" % self.__class__.plugin_name(),description=self.__class__.brief_description())parser.add_argument("-v", "--verbose",action="store_true",dest="verbose",help=MultiLanguage.get_string('LUACOMPILE_ARG_VERBOSE'))parser.add_argument("-s", "--src", dest="src_dir_arr",action="append", help=MultiLanguage.get_string('LUACOMPILE_ARG_SRC'))parser.add_argument("-d", "--dst", dest="dst_dir",help=MultiLanguage.get_string('LUACOMPILE_ARG_DST'))parser.add_argument("-e", "--encrypt",action="store_true", dest="encrypt",default=False,help=MultiLanguage.get_string('LUACOMPILE_ARG_ENCRYPT'))parser.add_argument("-j", "--decrypt",action="store_true", dest="decrypt",default=False,help=MultiLanguage.get_string('LUACOMPILE_ARG_ENCRYPT'))parser.add_argument("-k", "--encryptkey",dest="encryptkey",default="2dxLua",help=MultiLanguage.get_string('LUACOMPILE_ARG_ENCRYPT_KEY'))parser.add_argument("-b", "--encryptsign",dest="encryptsign",default="XXTEA",help=MultiLanguage.get_string('LUACOMPILE_ARG_ENCRYPT_SIGN'))parser.add_argument("--disable-compile",action="store_true", dest="disable_compile", default=False,help=MultiLanguage.get_string('LUACOMPILE_ARG_DISABLE_COMPILE'))parser.add_argument("--bytecode-64bit",action="store_true", dest="bytecode_64bit", default=False,help=MultiLanguage.get_string('LUACOMPILE_ARG_BYTECODE_64BIT'))options = parser.parse_args(argv)if options.src_dir_arr == None:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_SRC_NOT_SPECIFIED'),cocos.CCPluginError.ERROR_WRONG_ARGS)elif options.dst_dir == None:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_DST_NOT_SPECIFIED'),cocos.CCPluginError.ERROR_WRONG_ARGS)else:for src_dir in options.src_dir_arr:if os.path.exists(src_dir) == False:raise cocos.CCPluginError(MultiLanguage.get_string('LUACOMPILE_ERROR_DIR_NOT_EXISTED_FMT')% (src_dir), cocos.CCPluginError.ERROR_PATH_NOT_FOUND)# script directoryif getattr(sys, 'frozen', None):workingdir = os.path.realpath(os.path.dirname(sys.executable))else:workingdir = os.path.realpath(os.path.dirname(__file__))self.init(options, workingdir)

转载于:https://www.cnblogs.com/dzqdzq/p/10808213.html

xxtea 文件加密与解密相关推荐

  1. tkinter实现文件加密和解密

    源代码:https://gitee.com/mydreamambitious/file-encryption-and-decryption 注:这个代码和界面是做好的,但是还在进行优化和美化中.但是在 ...

  2. java xxtea加密,base64和Xxtea的加密和解密

    base64和Xxtea的加密和解密 数据加密是web数据安全的一种方式,前几天拿到一个base64+xxtea加密的数据,现在在这里整理一下使用的过程.首先当然是全网站找解密方法,但是最后的结果不是 ...

  3. Java基础篇之利用IO流给文件加密、解密

    目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...

  4. (C语言)简单的文件加密和解密程序

    一个简单的文件加密和解密程序 main.c #include <stdio.h> #include <stdlib.h> #include "fun.h"i ...

  5. 文件加密和解密 - 密钥存储

    当我们想要做一次加密系统,或者只是有一个关于这个问题,它是如何保存的加密和解密密钥. 一般认为想要的文件加密和解密,对称算法用于.一般是AES要么DES. 这就存在密钥管理的问题,它是如何? 基本上两 ...

  6. Linux下使用Vim/Vi给文件加密和解密

    本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...

  7. 文件加密和解密软件:AutoCrypt for mac

    为大家推荐一款好用的文件加密和解密软件,AutoCrypt for mac具备强大的AES-256算法,只需点击一下,即可加密并保存在自定义位置,能够轻松帮助用户加密或解密文件,而且autocrypt ...

  8. 文件加密及解密openssl

    Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...

  9. MD5文件加密和解密

    举个例子: import java.awt.*; import java.awt.event.*;import java.io.*;import java.security.*;import java ...

最新文章

  1. 深度学习在图像处理中的应用
  2. Android CoordinatorLayout使用
  3. 单例模式 之 单例模式——枚举
  4. windows mobile开发循序渐进(5)移动应用程序与webservice之间的数据交互
  5. powerbi visualization
  6. Unity5 GI与PBS渲染从用法到着色代码
  7. 计算机基础知识总结论文,大学计算机基础总结论文
  8. Pentium 4处理器架构/微架构/流水线 (3) - NetBurst微架构
  9. RSA签名验签学习笔记
  10. ip复原Java_Java实现 LeetCode 93 复原IP地址
  11. npm start 端口修改(window系统环境下)
  12. openwrt dnsmasq rebind_protection域名劫持保护
  13. 半导体产业行业手持式粒子计数器工作原理
  14. Keyphrase Chunking - bert2chunk_dataloader.py分析
  15. Pr 复古胶片老电影回忆效果
  16. npm WARN webpack-cli@3.3.11 requires a peer of webpack@4.x.x but none is installed. You must install
  17. storm DRPC问题
  18. 利用kmplayer查看wav声音文件的采样率
  19. 批量修改文件夹下文件的名字
  20. 运放单电源供电和双电源供电

热门文章

  1. iphone13价格多少 iphone13系列内存规格
  2. JavaScript基础第六天数组
  3. pc微信bat转图片程序 自动版
  4. zipfile 解压文件名乱码
  5. Mac系统Audition CS6的破解安装与汉化
  6. 2035年会证实外星人存在?或许是任重道远的探索
  7. python使用Neo4j图数据库——py2neo详解(1)
  8. 哈希表及哈希冲突的解决
  9. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(3)
  10. 为什么你的CLion不能编译运行