编辑代码

---@diagnostic disable: lowercase-global, undefined-field
-- 十进制转二进制
local function dec2bit(dec)
    local str = ''
    local tmp = dec
    while (tmp > 0) do
        if (tmp % 2 == 1) then
            str = str .. '1'
        else
            str = str .. '0'
        end
        tmp = math.modf(tmp / 2)
    end
    str = string.reverse(str)
    return str
end

-- 二进制转十进制
local function bit2dec(xorbit)
    return tonumber(xorbit, 2)
end

-- 二进制按位异或
local function bit2xor(str, cnt)
    cnt = cnt or 0
    if cnt > 0 then
        str = string.format('%0' .. cnt .. 's', str)
    end
    local len = #str
    local rtmp = ''
    for i = 1, len do
        local st = tonumber(string.sub(str, i, i))
        if (st == 1) then
            rtmp = rtmp .. '0'
        elseif (st == 0) then
            rtmp = rtmp .. '1'
        end
    end
    return rtmp, #rtmp
end

-- 加密方法 必须从1~无穷大开始 不支持0值
-- off_num偏移量
function math.numEnc(enum, off_num)
    local bit = dec2bit(enum)
    local xor_bit, xor_len = bit2xor(bit, nil)
    local enc_num = bit2dec(xor_bit)
    off_num = off_num or 0
    enc_num = enc_num + off_num
    return enc_num, xor_len
end

-- 解密方法
-- dec解密十进制值
-- off_num偏移量
-- xor_len解密位数长度
function math.numDec(dnum, xor_len, off_num)
    off_num = off_num or 0
    dnum = dnum - off_num
    local bit = dec2bit(dnum)
    local xor_bit, _ = bit2xor(bit, xor_len or 0)
    local dec_num = bit2dec(xor_bit)
    return dec_num
end



base64 = {}
local extract = _G.bit32 and _G.bit32.extract -- Lua 5.2/Lua 5.3 in compatibility mode
if not extract then
	if _G.bit then -- LuaJIT
		local shl, shr, band = _G.bit.lshift, _G.bit.rshift, _G.bit.band
		extract = function( v, from, width )
			return band( shr( v, from ), shl( 1, width ) - 1 )
		end
	elseif _G._VERSION == "Lua 5.1" then
		extract = function( v, from, width )
			local w = 0
			local flag = 2^from
			for i = 0, width-1 do
				local flag2 = flag + flag
				if v % flag2 >= flag then
					w = w + 2^i
				end
				flag = flag2
			end
			return w
		end
	else -- Lua 5.3+
		extract = load[[return function( v, from, width )
			return ( v >> from ) & ((1 << width) - 1)
		end]]()
	end
end

function base64.makeencoder( s62, s63, spad )
	local encoder = {}
	for b64code, char in pairs{[0]='E','G','C','D','A','F','B','H','I','J',
		'K','L','N','M','O','P','Q','R','S','T','U','V','W','X','Y',
		'Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n',
		'o','p','q','r','s','t','u','v','w','x','y','z','0','1','2',
		'3','4','5','6','7','8','9',s62 or '+',s63 or'/',spad or'='} do
		encoder[b64code] = char:byte()
	end
	return encoder
end

function base64.makedecoder( s62, s63, spad )
	local decoder = {}
	for b64code, charcode in pairs( base64.makeencoder( s62, s63, spad )) do
		decoder[charcode] = b64code
	end
	return decoder
end

local DEFAULT_ENCODER = base64.makeencoder()
local DEFAULT_DECODER = base64.makedecoder()

local char, concat = string.char, table.concat

function base64.enc( str, encoder, usecaching )
	encoder = encoder or DEFAULT_ENCODER
	local t, k, n = {}, 1, #str
	local lastn = n % 3
	local cache = {}
	for i = 1, n-lastn, 3 do
		local a, b, c = str:byte( i, i+2 )
		local v = a*0x10000 + b*0x100 + c
		local s
		if usecaching then
			s = cache[v]
			if not s then
				s = char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[extract(v,0,6)])
				cache[v] = s
			end
		else
			s = char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[extract(v,0,6)])
		end
		t[k] = s
		k = k + 1
	end
	if lastn == 2 then
		local a, b = str:byte( n-1, n )
		local v = a*0x10000 + b*0x100
		t[k] = char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[extract(v,6,6)], encoder[64])
	elseif lastn == 1 then
		local v = str:byte( n )*0x10000
		t[k] = char(encoder[extract(v,18,6)], encoder[extract(v,12,6)], encoder[64], encoder[64])
	end
	return concat( t )
end

function base64.dec( b64, decoder, usecaching )
	decoder = decoder or DEFAULT_DECODER
	local pattern = '[^%w%+%/%=]'
	if decoder then
		local s62, s63
		for charcode, b64code in pairs( decoder ) do
			if b64code == 62 then s62 = charcode
			elseif b64code == 63 then s63 = charcode
			end
		end
		pattern = ('[^%%w%%%s%%%s%%=]'):format( char(s62), char(s63) )
	end
	b64 = b64:gsub( pattern, '' )
	local cache = usecaching and {}
	local t, k = {}, 1
	local n = #b64
	local padding = b64:sub(-2) == '==' and 2 or b64:sub(-1) == '=' and 1 or 0
	for i = 1, padding > 0 and n-4 or n, 4 do
		local a, b, c, d = b64:byte( i, i+3 )
		local s
		if usecaching then
			local v0 = a*0x1000000 + b*0x10000 + c*0x100 + d
			s = cache[v0]
			if not s then
				local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
				s = char( extract(v,16,8), extract(v,8,8), extract(v,0,8))
				cache[v0] = s
			end
		else
			local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
			s = char( extract(v,16,8), extract(v,8,8), extract(v,0,8))
		end
		t[k] = s
		k = k + 1
	end
	if padding == 1 then
		local a, b, c = b64:byte( n-3, n-1 )
		local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40
		t[k] = char( extract(v,16,8), extract(v,8,8))
	elseif padding == 2 then
		local a, b = b64:byte( n-3, n-2 )
		local v = decoder[a]*0x40000 + decoder[b]*0x1000
		t[k] = char( extract(v,16,8))
	end
	return concat( t )
end
local ac = {}
function ac.split(str, p)
    local rt = {}
    str:gsub('[^' .. p .. ']+', function(w)
        table.insert(rt, w)
    end)
    return rt
end
local lines = {
    2,
    13,
    26,
    29,
}






local data_strs = {

    '90TRMlzZwI1SMFTUMFzQORXWxUFV0R0TwEDRThAcGRFRxUFT3GTaWRVTx8UNVRFUJR2aTJUTVRFdFRFTX1UNVdTRUG1QMx2UG1UVURXRUx0VMFTV3AFVOlzaxIVWBFTUMFzQORXWxUFV0pWT5sWNSFBZxAVTxNkT0lVNVRFdq5UOrFjUGxWNR1UND5AdZFTVURHROlzaxIVTwFTUMFzQORXWxUFV0R1T58BNVJlUwAVTxNkT0lVNVRFdq1Uewo2VGZkRSRUNVx0dwkmVU1UNPMjTUGVQ4VVVG1UVURXRUx0VMFTV',
    '=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3tWakdXRA50dFRkT3VAROdXRA50dFRkT3VAROdXRA50dFRFUyAUQWdkUVx0dwkmVU1UNPdXRApkMFpmZ2VAROdXRA50dFRUTwcAROdXRA50dFRkT3VAROdXRA50dFRkT3VkeSdzRqJWOHp2U1dARKRXRUZ2dFpHU3VUQO9SR6G1d4QkTFdkaQdHNU10RSZVUGFzQORXWxUFV0pHU3hDRO9SRUVVcFpBZ5ckaZZ2R6dFOFRFV4UkejdXRqGleHRFTxVkaOhzR6JVZHpnTNdkeSh2RUJWSHpXVVdkaLh2R6VWYHRkT3VAROdXRA50dFRkT5AFVRVlRGJFdFRFTX1UNVdTRA50dFRkT3VAROdXRA50dFRkTHZ0QOhTQD50dFRkT3VAROVnTC50dFRkT3VAROdXRA50dFRkT3VAROdXRA5UU1NkTlR3QOdXRA5AUSMkTxVUQOGDaTGleGFkVHJVVNdHNpZFVMFzT3MXeLd3ctM2dOpWZ3GjaldHMUt0dnRkW3lVQLd3czI2d0k3Y3VAROdXRA50dFRkT3VAROdXRA50dFRkT3VAROdXRA50dFRkT3VAROdXRA50dFRkT3GjaOdkUWFVQxNkT0lVNVRFdA50dFRkTKlDbmdXRqZ2K14mZrUjbmtSMuZ2K1gkTrUjbmtSMuZ2K14mZrUjbmtSMuZ2K14mZrUDSOdXRA50dFRkT3VAROdXRA50dFRkT3VAVmdHNB5UOGRVUVZUQSRXRUx0VMFTV',







}

-- 分段翻转
local function segment_flip_str(str)
    local len = math.ceil(#str / 10)
    local data_str = {}
    for i = len, 1, -1 do
        local s = 10 * (i - 1) + 1
        local e = 10 * i
        local cstr = str:sub(s, e)
        data_str[#data_str + 1] = string.reverse(cstr)
    end
    return table.concat(data_str, '')
end

-- 日志
print('[DzAPI]')
for index, data_str in ipairs(data_strs) do
    local encode2 = segment_flip_str(data_str)
    -- print(encode2)
    local decode2 = base64.dec(base64.dec(encode2))
    -- print(decode2)

    local save_datas = ac.split(decode2, ';')
    table.sort(save_datas, function(a, b)
        return a < b
    end)

    for _, save_data in ipairs(save_datas) do
        print(save_data)
    end
end
print(' ')
print(' ')

-- 控制台
-- print('--------------------------')
-- local line_cnt = 1
-- for index, line in ipairs(lines) do
--     local temp = {}
--     -- print(line_cnt, line)
--     for i = line_cnt, line do
--         line_cnt = line_cnt + 1
--         temp[#temp + 1] = data_strs[i]
--     end
--     local str = table.concat(temp)
--     local encode2 = segment_flip_str(str)
--     -- print(encode2)
--     local decode2 = base64.dec(base64.dec(encode2))
--     -- print(decode2)

--     local save_datas = ac.split(decode2, ';')
--     table.sort(save_datas, function(a, b)
--         return a < b
--     end)

--     for _, save_data in ipairs(save_datas) do
--         print(save_data)
--     end
-- end
-- print('--------------------------')