Pregunta

¿Existe una función existente para generar la clave de respuesta del servidor en LUA? Aquí está la solución en Python: Problema de apretón de manos de WebSocket

Tengo los dos números clave capturados, los espacios contados, la tercera cadena capturada y esperando que el resto se encuentre en una función existente ...

¿Fue útil?

Solución

Si necesita el apretón de manos más antiguo (Protocolo 0), puede usar el siguiente código para obtener el valor del apretón de manos de las dos claves:

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

Esto produce el mismo valor que el ejemplo dado en el borrador del protocolo. Este ejemplo usa MD5 biblioteca para calcular la suma de verificación y está disponible compilada en Luaforwindows.

La implementación del Protocolo de WebSocket versión 6 es mucho más simple:

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=

Este ejemplo usa el Luacrypto para Sha1 Sum y MÍMICA de Luasocket.

Otros consejos

Eche un vistazo al Implementación de Lua-Websockets. Aquí está el Sha1 cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top