zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    JS,JQuery的扩展方法
    Listbox简单用法
    Button模板,样式
    WPF开发经验
    弹出窗体主体实现事件
    从一知半解到揭晓Java高级语法—泛型
    深入理解Java之装箱与拆箱
    探究 — 二叉搜索树
    深入理解二叉树(超详细)
    二分查找及其变种算法
  • 原文地址:https://www.cnblogs.com/decode1234/p/8505001.html
Copyright © 2011-2022 走看看