lua中实现签名验证的脚本,lua中利用ngx实现md5加密
浏览数 98294
赞
(0)
nginx+lua做签名少不了进行md5操作,lua本身要支持md5,需要安装md5支持,github地址:https://github.com/keplerproject/md5
然后把md5.lua,core.so文件以及需要的string.lua文件(在md5.lua中有调用string和core)都放到目录/usr/share/lua/5.1 运行以下lua脚本
实际应用中lua很多时候都是和nginx一起应用,使用nginx_lua模块中的md5使用更方便(直接用即可)。如下是对我对URL请求里中的签名值进行验证的lua脚本:
转载地址:http://www.04007.cn/article/428.html
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