还是直接上代码吧~


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加解密相关推荐

  1. C#和Javascript间互转的Xxtea加解密

    很有意思的一件事情,当我想要找 Xxtea 加解密算法的时候,发现了前同事(likui318)的代码,不妨分享出来.此代码满足: 1:Xxtea支持中文: 2:支持 JS 和 C# 加解密之间的互转: ...

  2. JAVA:实现XXTea加解密算法(附完整源码)

    JAVA:实现XXTea加解密算法 public class XXTEAprivate XXTEA() {}public static byte[] encrypt(byte[] data, byte

  3. XXTEA 加解密算法的 Python 实现

    代码实现与示例 #!/usr/bin/env python # -*- coding: utf-8 -*-""" 参数描述:DELTA: 神秘常数δ,它来源于黄金比率,以 ...

  4. C语言实现TEA系列加解密算法

    C语言实现TEA系列加解密算法 TEA加解密 XTEA加解密 XXTEA加解密 TEA加解密 #include <stdio.h> #include <stdint.h>//加 ...

  5. android cocoscreator jsc js 间加解密(六)

    前言 前面 学了 aandroid cocoscreator 热更新 超详细篇(五) 这章 主要学习 cocoscreator 构建后 jsc 与js 文件 之间相互转化(加解密)并实际测试. 可以配 ...

  6. XXTea加密 c++ 与 js 互相加解密

    关于加密功能,客户端使用的是creator  用js开发的,服务器端用lua做的 要做加密功能: 1.利用c++绑定调用c++实现加密,                             好处: ...

  7. lua java 加密解密_AES加解密多版本(GO、JAVA、Python)实现

    [TOC] 异构系统基于RESTful接口加解密 环境:GO1.8/JDK1.8/Python2.7 GO示例 package common import ( "crypto/aes&quo ...

  8. 基于新唐M0的XXTEA加密解密算法源码

    源:基于新唐M0的XXTEA加密解密算法源码 /*--------------------------------------------------------------------------- ...

  9. openresty 与 java RSA加解密

    上一篇搞定了openresty与java之间的aes加解密.这一篇就来说说openresty与java之间RSA的加解密.在测试的过程中.发现了与aes同样的问题.就是openresty支持的填充模式 ...

  10. Go与Nginx(lua-resty-string)跨语言加解密

    需求 用户登录后,go服务端把身份.IP信息等加密放到cookie中.Nginx(基于openresty构建)lua解密,比较访问的IP与cookie中记录的IP是否一致,不一致则进行拦截. 以下采用 ...

最新文章

  1. Visual Studio 2010 新功能总结(一)
  2. 生成JSON数据--fastjson(阿里)方法
  3. 跟正刊学习SCI英文写作——摘要部分的拆解
  4. Git2.29让Git成功“牵 手”Gerrit
  5. 使用fetch封装ajax_如何使用Fetch在JavaScript中进行AJAX调用
  6. Asp.NetWebForm的控件属性
  7. 开源性能测试工具 - Apache ab 介绍
  8. 如何高效地远程部署?Fabric 来支招!
  9. [leetcode] 872. 叶子相似的树(周赛)
  10. Hibernate的持久化对象状态的方法
  11. 系统架构设计:平滑发布和 ABTesting,你都会吗?
  12. SpringBoot+Shiro 学习之数据库动态权限管理和 Redis 缓存
  13. Apache ShenYu 快速开始
  14. Springboot配置suffix指定mvc视图的后缀
  15. nlpir语义分析 java_集成nlpir语义分析
  16. 测试人员应看重「业务测试能力」
  17. 使用 bash, curl 随机访问指定页面,不输出页面内容
  18. 阿里云物联网平台场景体验-阿里云开发者社区
  19. 测绘计算机编程心得体会,测绘心得体会
  20. 我们到底该如何学习《数据结构与算法》?

热门文章

  1. adb命令刷机vivox20_vivo手机变砖 刷机手机端口连上显示adb
  2. 【软件工程】层次图、HIPO图——期末快速复习用
  3. Lrc歌词批量下载助手 MP3歌词批量下载助手
  4. 安装部署VMware vSphere 为IBM x3850 X5服务器安装配置VMware ESXi
  5. docker搭建pgadmin并挂载
  6. Abaqus的inp文件详解
  7. 华为模拟器 ENSP 教程
  8. Excel单个单元格内逗号分割的字符串去重
  9. 关于Docker镜像再封装的详细文档
  10. Java语言分为三大平台:JavaSE、JavaEE、JavaME