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 来的,但是不对。请教下大家。