xxtea 文件加密与解密
加密
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 文件加密与解密相关推荐
- tkinter实现文件加密和解密
源代码:https://gitee.com/mydreamambitious/file-encryption-and-decryption 注:这个代码和界面是做好的,但是还在进行优化和美化中.但是在 ...
- java xxtea加密,base64和Xxtea的加密和解密
base64和Xxtea的加密和解密 数据加密是web数据安全的一种方式,前几天拿到一个base64+xxtea加密的数据,现在在这里整理一下使用的过程.首先当然是全网站找解密方法,但是最后的结果不是 ...
- Java基础篇之利用IO流给文件加密、解密
目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...
- (C语言)简单的文件加密和解密程序
一个简单的文件加密和解密程序 main.c #include <stdio.h> #include <stdlib.h> #include "fun.h"i ...
- 文件加密和解密 - 密钥存储
当我们想要做一次加密系统,或者只是有一个关于这个问题,它是如何保存的加密和解密密钥. 一般认为想要的文件加密和解密,对称算法用于.一般是AES要么DES. 这就存在密钥管理的问题,它是如何? 基本上两 ...
- Linux下使用Vim/Vi给文件加密和解密
本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...
- 文件加密和解密软件:AutoCrypt for mac
为大家推荐一款好用的文件加密和解密软件,AutoCrypt for mac具备强大的AES-256算法,只需点击一下,即可加密并保存在自定义位置,能够轻松帮助用户加密或解密文件,而且autocrypt ...
- 文件加密及解密openssl
Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...
- MD5文件加密和解密
举个例子: import java.awt.*; import java.awt.event.*;import java.io.*;import java.security.*;import java ...
最新文章
- 深度学习在图像处理中的应用
- Android CoordinatorLayout使用
- 单例模式 之 单例模式——枚举
- windows mobile开发循序渐进(5)移动应用程序与webservice之间的数据交互
- powerbi visualization
- Unity5 GI与PBS渲染从用法到着色代码
- 计算机基础知识总结论文,大学计算机基础总结论文
- Pentium 4处理器架构/微架构/流水线 (3) - NetBurst微架构
- RSA签名验签学习笔记
- ip复原Java_Java实现 LeetCode 93 复原IP地址
- npm start 端口修改(window系统环境下)
- openwrt dnsmasq rebind_protection域名劫持保护
- 半导体产业行业手持式粒子计数器工作原理
- Keyphrase Chunking - bert2chunk_dataloader.py分析
- Pr 复古胶片老电影回忆效果
- npm WARN webpack-cli@3.3.11 requires a peer of webpack@4.x.x but none is installed. You must install
- storm DRPC问题
- 利用kmplayer查看wav声音文件的采样率
- 批量修改文件夹下文件的名字
- 运放单电源供电和双电源供电