博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua之base64加密和解密算法。
阅读量:5061 次
发布时间:2019-06-12

本文共 1960 字,大约阅读时间需要 6 分钟。

local function encodeBase64(source_str)    local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'    local s64 = ''    local str = source_str    while #str > 0 do        local bytes_num = 0        local buf = 0        for byte_cnt=1,3 do            buf = (buf * 256)            if #str > 0 then                buf = buf + string.byte(str, 1, 1)                str = string.sub(str, 2)                bytes_num = bytes_num + 1            end        end        for group_cnt=1,(bytes_num+1) do            local b64char = math.fmod(math.floor(buf/262144), 64) + 1            s64 = s64 .. string.sub(b64chars, b64char, b64char)            buf = buf * 64        end        for fill_cnt=1,(3-bytes_num) do            s64 = s64 .. '='        end    end    return s64endlocal function decodeBase64(str64)    local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'    local temp={}    for i=1,64 do        temp[string.sub(b64chars,i,i)] = i    end    temp['=']=0    local str=""    for i=1,#str64,4 do        if i>#str64 then            break        end        local data = 0        local str_count=0        for j=0,3 do            local str1=string.sub(str64,i+j,i+j)            if not temp[str1] then                return            end            if temp[str1] < 1 then                data = data * 64            else                data = data * 64 + temp[str1]-1                str_count = str_count + 1            end        end        for j=16,0,-8 do            if str_count > 0 then                str=str..string.char(math.floor(data/math.pow(2,j)))                data=math.mod(data,math.pow(2,j))                str_count = str_count - 1            end        end    end    local last = tonumber(string.byte(str, string.len(str), string.len(str)))    if last == 0 then        str = string.sub(str, 1, string.len(str) - 1)    end    return strend

转载于:https://www.cnblogs.com/decode1234/p/8505001.html

你可能感兴趣的文章
C# winform 类型转换和时间详解
查看>>
排序算法
查看>>
java操作二叉树
查看>>
Properties
查看>>
Java_I/O输入输出_实现读取文件时出现一个表示读取进度的进度条。可以使用java.swing包提供的输入流类ProgressMonitorInputStream...
查看>>
Linux Running State Process ".so"、"code" Injection Technology
查看>>
php学习笔记
查看>>
AJAX的使用
查看>>
在Windows 8.1及IE 11中如何使用HttpWatch
查看>>
时间仍在,是我们在飞逝
查看>>
[转]数据挖掘中所需的概率论与数理统计知识、上
查看>>
centos一键安装lnmp成功后无法访问ip(解决办法)
查看>>
在JS中使用全局变量
查看>>
Django学习-4-request获取数据
查看>>
python----redis
查看>>
证明:37的500次方减去37的100次方的结果是10的倍数!
查看>>
android 自定义流布局实现
查看>>
rzsz的安装
查看>>
批处理常见疑问
查看>>
枚举数与可枚举类型(笔记)
查看>>