lua实现xxTea加解密
还是直接上代码吧~
function _long2str(v, w)local len = #vlocal n = bit.lshift((len - 1) , 2)if (w) thenlocal m = v [len]if ((m < n - 3) or (m > n)) thenreturn falseendn = mendlocal s = {}for i = 1 , len dos [i] = string.packL(v[i])endif (w) thenreturn string.sub(table.concat(s, ''), 0, n)elsereturn table.concat(s, '')end
end
function _str2long(s, w)local v = string.unpackL(s .. string.rep("\0", (4 - bit.band((string.len(s) % 4) , 3))))if (w) thenv [#v+1] = string.len(s)endreturn v
end
function _int32(n)while (n >= 2147483649) don = n - 4294967296endwhile (n <= -2147483649) don = n + 4294967296endreturn n
end
function security.xxTEAEncrypt(str, key, toBase64)toBase64 = toBase64 or trueif (str == "") thenreturn ""endlocal v = _str2long(str, true)local k = _str2long(key, false)if (#k < 4) thenfor i = #k+1, 4, 1 dok [i] = 0endendlocal n = #vlocal z = v [n]local y = v [1]local delta = -0x61C88647local q = math.floor(6 + 52 / (n)) --设定加密轮数local sum = 0while 0 < q doq = q -1sum = _int32(sum + delta)e = bit.band(bit.rshift(sum , 2), 3)local p = 0for p = 0, n-2 doy = v [p + 2]mx = bit.bxor(_int32(bit.bxor(bit.band(bit.rshift(z, 5), 0x07ffffff), bit.lshift(y , 2)) + bit.bxor(bit.band(bit.rshift(y, 3), 0x1fffffff), bit.lshift(z, 4))), _int32(bit.bxor(sum, y) + bit.bxor(k[bit.bxor(bit.band((p), 3), e)+1], z)))z = _int32(v[p+1] + mx)v [p+1] = zendp = #v - 1y = v [1]mx = bit.bxor(_int32(bit.bxor(bit.band(bit.rshift(z, 5), 0x07ffffff), bit.lshift(y , 2)) + bit.bxor(bit.band(bit.rshift(y, 3), 0x1fffffff), bit.lshift(z, 4))), _int32(bit.bxor(sum, y) + bit.bxor(k[bit.bxor(bit.band((p), 3), e)+1], z)))z = _int32(v[n] + mx)v [n] = zendif (toBase64) thenlocal r = security.url_safe_base64_encode(_long2str(v, false))return rendreturn _long2str(v, false)
end
function security.xxTEADecrypt(str, key, toBase64)toBase64 = toBase64 or trueif (str == "") thenreturn ""end-- logcat(str)if toBase64 thenstr = security.url_safe_base64_decode(str)endlocal v = _str2long(str, false)local k = _str2long(key, false)if (#k < 4) thenfor i = #k+1, 4, 1 dok [i] = 0endendlocal n = #v - 1local z = v [n]local y = v [1]local delta = -0x61C88647local q = math.floor(6 + 52 / (n+1)) --设定加密轮数local sum = _int32(q * delta)while (sum ~= 0) doe = bit.band(bit.rshift(sum , 2), 3)
-- test_result = test_result .."e: "..e.."\n"
-- logcat ("e: "..e)local p = n for p = n, 1, -1 do
z = v [p]
-- test_result = test_result .."z: "..z.."p-1: "..(p-1).."\n"
-- logcat ("z: "..z.."p-1: "..p-1)
-- test_result = test_result .."y: "..y.."\n"
-- logcat ("y: "..y)
-- test_result = test_result .."p: "..p.."\n"
-- logcat ("p: "..p)
-- test_result = test_result .."k: "..(k[bit.bxor(bit.band((p), 3), e)+1]).."\n"
-- logcat ("k: "..k[bit.bxor(bit.band((p), 3), e)+1])mx = bit.bxor(_int32(bit.bxor(bit.band(bit.rshift(z, 5), 0x07ffffff), bit.lshift(y , 2)) + bit.bxor(bit.band(bit.rshift(y, 3), 0x1fffffff), bit.lshift(z, 4))), _int32(bit.bxor(sum, y) + bit.bxor(k[bit.bxor(bit.band((p), 3), e)+1], z)))
-- test_result = test_result .."mx: "..mx.."\n"
-- logcat ("mx: "..mx)y = _int32(v [p+1] - mx)
-- test_result = test_result .."y: "..y.."p: "..p.."\n"
-- logcat ("y: "..y.."p: "..p)v [p+1] = yendp = 0z = v[n+1]
-- test_result = test_result .."z2: "..z.."\n"
-- logcat ("z2: "..z)mx = bit.bxor(_int32(bit.bxor(bit.band(bit.rshift(z, 5), 0x07ffffff), bit.lshift(y , 2)) + bit.bxor(bit.band(bit.rshift(y, 3), 0x1fffffff), bit.lshift(z, 4))), _int32(bit.bxor(sum, y) + bit.bxor(k[bit.bxor(bit.band((p), 3), e)+1], z)))
-- test_result = test_result .."mx2: "..mx.."\n"
-- logcat ("mx2: "..mx)y = _int32(v[1] - mx)
-- test_result = test_result .."y2: "..y.."\n"
-- logcat ("y2: "..y)v [1] = ysum = _int32(sum - delta)endreturn _long2str(v, true)
end
PS: 由于不是纯LUA代码(为Xscript LUA脚本代码),所以需要修改部分代码才可以运行,需注意。
lua实现xxTea加解密相关推荐
- C#和Javascript间互转的Xxtea加解密
很有意思的一件事情,当我想要找 Xxtea 加解密算法的时候,发现了前同事(likui318)的代码,不妨分享出来.此代码满足: 1:Xxtea支持中文: 2:支持 JS 和 C# 加解密之间的互转: ...
- JAVA:实现XXTea加解密算法(附完整源码)
JAVA:实现XXTea加解密算法 public class XXTEAprivate XXTEA() {}public static byte[] encrypt(byte[] data, byte
- XXTEA 加解密算法的 Python 实现
代码实现与示例 #!/usr/bin/env python # -*- coding: utf-8 -*-""" 参数描述:DELTA: 神秘常数δ,它来源于黄金比率,以 ...
- C语言实现TEA系列加解密算法
C语言实现TEA系列加解密算法 TEA加解密 XTEA加解密 XXTEA加解密 TEA加解密 #include <stdio.h> #include <stdint.h>//加 ...
- android cocoscreator jsc js 间加解密(六)
前言 前面 学了 aandroid cocoscreator 热更新 超详细篇(五) 这章 主要学习 cocoscreator 构建后 jsc 与js 文件 之间相互转化(加解密)并实际测试. 可以配 ...
- XXTea加密 c++ 与 js 互相加解密
关于加密功能,客户端使用的是creator 用js开发的,服务器端用lua做的 要做加密功能: 1.利用c++绑定调用c++实现加密, 好处: ...
- lua java 加密解密_AES加解密多版本(GO、JAVA、Python)实现
[TOC] 异构系统基于RESTful接口加解密 环境:GO1.8/JDK1.8/Python2.7 GO示例 package common import ( "crypto/aes&quo ...
- 基于新唐M0的XXTEA加密解密算法源码
源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...
- openresty 与 java RSA加解密
上一篇搞定了openresty与java之间的aes加解密.这一篇就来说说openresty与java之间RSA的加解密.在测试的过程中.发现了与aes同样的问题.就是openresty支持的填充模式 ...
- Go与Nginx(lua-resty-string)跨语言加解密
需求 用户登录后,go服务端把身份.IP信息等加密放到cookie中.Nginx(基于openresty构建)lua解密,比较访问的IP与cookie中记录的IP是否一致,不一致则进行拦截. 以下采用 ...
最新文章
- Visual Studio 2010 新功能总结(一)
- 生成JSON数据--fastjson(阿里)方法
- 跟正刊学习SCI英文写作——摘要部分的拆解
- Git2.29让Git成功“牵 手”Gerrit
- 使用fetch封装ajax_如何使用Fetch在JavaScript中进行AJAX调用
- Asp.NetWebForm的控件属性
- 开源性能测试工具 - Apache ab 介绍
- 如何高效地远程部署?Fabric 来支招!
- [leetcode] 872. 叶子相似的树(周赛)
- Hibernate的持久化对象状态的方法
- 系统架构设计:平滑发布和 ABTesting,你都会吗?
- SpringBoot+Shiro 学习之数据库动态权限管理和 Redis 缓存
- Apache ShenYu 快速开始
- Springboot配置suffix指定mvc视图的后缀
- nlpir语义分析 java_集成nlpir语义分析
- 测试人员应看重「业务测试能力」
- 使用 bash, curl 随机访问指定页面,不输出页面内容
- 阿里云物联网平台场景体验-阿里云开发者社区
- 测绘计算机编程心得体会,测绘心得体会
- 我们到底该如何学习《数据结构与算法》?