Lua でサーバーの応答キーを生成する既存の関数はありますか? これがpythonの解決策です:websocket handshake problem
私は2つのキー番号をキャプチャし、スペースを数え、3番目の文字列をキャプチャし、残りが既存の関数にあることを願っています...
Lua でサーバーの応答キーを生成する既存の関数はありますか? これがpythonの解決策です:websocket handshake problem
私は2つのキー番号をキャプチャし、スペースを数え、3番目の文字列をキャプチャし、残りが既存の関数にあることを願っています...
古いハンドシェイク (プロトコル 0) が必要な場合は、次のコードを使用して 2 つのキーからハンドシェイク値を取得できます。
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
これは、プロトコル ドラフトで与えられた例と同じ値を生成します。この例では、 MD5ライブラリを使用してチェックサムを計算し、LuaForWindowsでコンパイルして利用できます。
WebSocket プロトコル バージョン 6 の実装は、はるかに単純です。
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=
この例では、 SHA1 サムにLuaCryptoを使用し、LuaSocket からMIMEを使用します。
lua-websocketsの実装を見てください。これがsha1のものです。