lua实现xxTea加解密
来源:互联网 发布:算法工程师工资很高吗 编辑:程序博客网 时间:2024/05/16 15:14
不废话,贴代码:
function security.xxTEAEncrypt(str, key, toBase64) toBase64 = toBase64 or true if (str == "") then return "" end local v = _str2long(str, true) local k = _str2long(key, false) if (#k < 4) then for i = #k+1, 4, 1 do k [i] = 0 end end local n = #v local z = v [n] local y = v [1] local delta = -0x61C88647 local q = math.floor(6 + 52 / (n)) --设定加密轮数 local sum = 0 while 0 < q do q = q -1 sum = _int32(sum + delta) e = bit.band(bit.rshift(sum , 2), 3) local p = 0 for p = 0, n-2 do y = 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] = z end p = #v - 1 y = 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] = z end if (toBase64) then local r = security.url_safe_base64_encode(_long2str(v, false)) return r end return _long2str(v, false)endfunction security.xxTEADecrypt(str, key, toBase64) toBase64 = toBase64 or true if (str == "") then return "" end -- logcat(str) if toBase64 then str = security.url_safe_base64_decode(str) end local v = _str2long(str, false) local k = _str2long(key, false) if (#k < 4) then for i = #k+1, 4, 1 do k [i] = 0 end end local n = #v - 1 local z = v [n] local y = v [1] local delta = -0x61C88647 local q = math.floor(6 + 52 / (n+1)) --设定加密轮数 local sum = _int32(q * delta) while (sum ~= 0) do e = 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] = y end<pre name="code" class="plain">function _long2str(v, w) local len = #v local n = bit.lshift((len - 1) , 2) if (w) then local m = v [len] if ((m < n - 3) or (m > n)) then return false end n = m end local s = {} for i = 1 , len do s [i] = string.packL(v[i]) end if (w) then return string.sub(table.concat(s, ''), 0, n) else return table.concat(s, '') endendfunction _str2long(s, w) local v = string.unpackL(s .. string.rep("\0", (4 - bit.band((string.len(s) % 4) , 3)))) if (w) then v [#v+1] = string.len(s) end return vendfunction _int32(n) while (n >= 2147483649) do n = n - 4294967296 end while (n <= -2147483649) do n = n + 4294967296 end return nend
p = 0 z = 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] = y sum = _int32(sum - delta) end return _long2str(v, true)end
2 0
- lua实现xxTea加解密
- cocos2dx lua XXTEA来加密解密实现详解
- XXTEA加解密as3和python分别实现
- C#和Javascript间互转的Xxtea加解密
- XXTea加密 c++ 与 js 互相加解密
- xxtea 加密解密
- XXTea 加密/解密 字符串
- xxtea官方解密
- Python实现加解密
- C++ XXTEA加密解密算法
- c#实现文件加解密
- JAVA加解密简单实现
- DES加解密+C实现
- java实现DESede加解密
- base64加、解密实现方法
- BASE64加解密实现方法
- c 实现aes加解密
- Java实现AES256加解密
- Android 快速开发框架:推荐10个框架
- 通过option来控制另外一个盒子的显示隐藏
- 使用solr创建 附件[word pdf txt等文件索引]
- 关于设置display:inline-block,使两个div产生空隙的解决方法
- react native 学习之模仿”探探“实现豆瓣电影app部分功能
- lua实现xxTea加解密
- 熟读 6E
- 什么导致了消失的梯度问题?深度神经网络中的梯度不稳定性
- secureCRT安装及破解
- 5min通过ViewPager实现简易微信主界面(1)-雏形
- 嵌入式系统学习(一)-S5P4418 芯片介绍
- Windows C++发送以太网(Ethernet)帧
- Bootstrap Tooltip显示换行和左对齐
- 预定义函数对象和函数适配器案例