skynet 怎么给 mysql drive 增加对 caching_sha2_password 的支持

2025 年 3 月 10 日
 awanganddong

mysql 用的是 8.0 。插件是 caching_sha2_password

skynet 默认扩展不支持这种模式。 所以想请教下这种怎么改写。 也看了 https://github.com/openresty/lua-resty-mysql 源码。还是一脑袋浆糊。

        if auth_plugin == "caching_sha2_password" then
            token = _compute_caching_sha2_password_token(password, scramble)
        else
            token = _compute_token(password, scramble)
        end
        local client_flags = 260047
        local req = strpack("<I4I4c1c23zs1z",
                client_flags,
                self._max_packet_size,
                strchar(charset),
                strrep("\0", 23),
                user,
                token,
                database
        )
        local authpacket = _compose_packet(self, req)
        sockchannel:request(authpacket, dispatch_resp)
        if on_connect then
            on_connect(self)
        end
        
        
        
        function _compute_caching_sha2_password_token(password, scramble)
    -- 1. Compute SHA-256 hash of the password
    local password_hash = sha.sha256(password)

    -- 2. Concatenate the hash with the scramble

    local combined = sha.sha256(sha.sha256(password_hash .. scramble))

    local token = xor(password_hash, combined)
    -- 3. Compute SHA-256 hash of the combined value
    return token
end

下边是我检索 chatgpt 来的,但是不对。请教下大家。
2187 次点击
所在节点    Lua
1 条回复
cj0326
2025 年 3 月 10 日
蹲一个回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1117310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX