YiluPHP
这家伙很懒,什么都没有留下...

经验 lua中实现签名验证的脚本,lua中利用ngx实现md5加密

浏览数 98294
nginx+lua做签名少不了进行md5操作,lua本身要支持md5,需要安装md5支持,github地址:https://github.com/keplerproject/md5
cd /opt/modules/downloads
wget http://luaforge.net/frs/download.php/2746/md5-1.1.1.tar.gz
tar xzvf md5-1.1.1.tar.gz 
cd md5-1.1.1
./configure
Make
make install

然后把md5.lua,core.so文件以及需要的string.lua文件(在md5.lua中有调用string和core)都放到目录/usr/share/lua/5.1 运行以下lua脚本
package.path = "/usr/share/lua/5.1/?.lua;;"
package.cpath= '/usr/share/lua/5.1/?.so;'
require 'md5'
sign=md5.sumhexa("123456")
print(sign)

实际应用中lua很多时候都是和nginx一起应用,使用nginx_lua模块中的md5使用更方便(直接用即可)。如下是对我对URL请求里中的签名值进行验证的lua脚本:
--检验请求的sign签名是否正确
--intable:传入的参数值组成的table,不含传入的签名值
--salt:加入到签名字符串中的混杂字符
--insign:请求中传入进来的签名值
function signcheck(intable, salt, insign)
    local keys, tmp = {}, {}
    --提出所有的键名并按字符顺序排序
    for k, _ in pairs(intable) do 
        keys[#keys+1]= k
    end
    sort(keys)
    --根据排序好的键名依次读取值并拼接字符串成key=value&key=value
    for _, k in pairs(keys) do
        if type(intable[k]) == "string" or type(intable[k]) == "number" then 
            tmp[#tmp+1] = k .. "=" .. tostring(intable[k])
        end
    end
    --将salt添加到最后,计算正确的签名sign值并与传入的sign签名对比,
    local signchar = concat(tmp, "&") .. salt
    local rightsign = ngx.md5(signchar);
    if insign ~= rightsign then
        --如果签名错误返回错误信息并记录日志,
        local mess="sign error: insign,"..insign .. " right sign:" ..rightsign.. " sign_char:" .. signchar
        ngx.log(ngx.ERR, mess)
        return false,mess
    end
    return true
end

转载地址:http://www.04007.cn/article/428.html
我来说说