• lua之base64加密和解密算法。


    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 s64
    end
    
    local 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 str
    end
  • 相关阅读:
    Intern Day16
    粉红
    开始还房贷!
    Sonnet-十四行诗
    CSS兼容大全
    TCL电视直播软件
    《Linux权威指南》阅读笔记(2)
    《Linux权威指南》阅读笔记(1)
    Linux crontab定时执行任务 命令格式与详细例子
    linux下find查找命令用法
  • 原文地址:https://www.cnblogs.com/decode1234/p/8505001.html
Copyright © 2020-2023  润新知