首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Lua生成websocket握手?

如何从Lua生成websocket握手?
EN

Stack Overflow用户
提问于 2012-02-19 15:51:28
回答 2查看 1.7K关注 0票数 2

Lua中有没有生成服务器响应键的现有函数?下面是python中的解决方案:websocket handshake problem

我捕获了两个关键数字,计算了空格,捕获了第三个字符串,并希望其余的位于现有函数中……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-19 18:30:21

如果需要较旧的握手(协议0),可以使用以下代码从两个key中获取握手的值:

代码语言:javascript
运行
复制
md5 = require 'md5'

function getnumbers(str)
    local num = ""
    str:gsub('%d', function(d) num = num .. d end)
    return tonumber(num)
end
function countspaces(str)
    return select(2, str:gsub(' ', ' '))
end
function to32bitint(i)
    return string.char(i/256^3 % 256, i/256^2 % 256, i/256 % 256, i % 256)
end
function websocketresponse(key1, key2, end8)
    local n1, s1 = getnumbers(key1), countspaces(key1)
    local n2, s2 = getnumbers(key2), countspaces(key2)
    local cat = to32bitint(n1/s1) .. to32bitint(n2/s2) .. ending8
    return md5.sum(cat)
end

websocket_key1 = "18x 6]8vM;54 *(5:  {   U1]8  z [  8"
websocket_key2 = "1_ tx7X d  <  nw  334J702) 7]o}` 0"
ending8 = "Tm[K T2u"
print(websocketresponse(websocket_key1, websocket_key2, ending8))
--> fQJ,fN/4F4!~K~MH

这将生成与the protocol draft中给出的示例相同的值。此示例使用LuaForWindows编译的MD5库来计算校验和。

WebSocket协议版本6的实现要简单得多:

代码语言:javascript
运行
复制
crypto = require 'crypto'
mime = require 'mime'

function websocketresponse6(key)
    local magic = key .. "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
    return (mime.b64(crypto.digest('sha1', magic, true)))
end 

key6 = "x3JJHMbDL1EzLkh9GBhXDw=="
print(websocketresponse6(key6))
--> HSmrc0sMlYUkAGmm5OPpG2HaGWk=

此示例使用LuaCrypto表示SHA1 sum,并使用来自LuaSocket的MIME

票数 1
EN

Stack Overflow用户

发布于 2013-11-06 06:52:30

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9347612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档