Encryption 需要了解如何使用gsub和tonumber对lua源代码进行编码的帮助吗?

Encryption 需要了解如何使用gsub和tonumber对lua源代码进行编码的帮助吗?,encryption,encoding,lua,Encryption,Encoding,Lua,我是LUA的新手,但我发现gsub是一个全局替换函数,而tonumber是一个转换函数。我不明白的是这两个函数是如何一起用来生成编码字符串的 我已经试过阅读部分PIL(Lua编程)和参考手册,但仍然有点困惑 local L0_0, L1_1 function L0_0(A0_2) return (A0_2:gsub("..", function(A0_3) return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) %

我是LUA的新手,但我发现gsub是一个全局替换函数,而tonumber是一个转换函数。我不明白的是这两个函数是如何一起用来生成编码字符串的

我已经试过阅读部分PIL(Lua编程)和参考手册,但仍然有点困惑

local L0_0, L1_1
function L0_0(A0_2)
  return (A0_2:gsub("..", function(A0_3)
    return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) % 256)
  end))
end
encodes = L0_0
L0_0 = gg
L0_0 = L0_0.toast
L1_1 = "__loading__\226\128\166"
L0_0(L1_1)
L0_0 = encodes
L1_1 = --"The Encoded String"
L0_0 = L0_0(L1_1)
L1_1 = load
L1_1 = L1_1(L0_0)
pcall(L1_1)

由于注释的长度,我删除了放置注释的编码字符串。如果需要,我也可以上传编码字符串。

gsub
用于获取
A0_2
的两位数部分。这意味着字符串
A0_3
是一个2位十六进制数,但它不是数字格式,因此我们无法对该值进行数学运算
A0_3
是一个十六进制数,可以根据
tonubmer
的使用方式来推断

t编号
from:

尝试将其参数转换为数字。如果参数已经是一个数字或可转换为数字的字符串,则tonumber返回该数字;否则,它返回nil

可选参数指定解释数字的基数。基数可以是2到36之间的任何整数(包括2和36)。在10以上的基数中,字母“A”(大写或小写)表示10,“B”表示11,以此类推,“Z”表示35。以10为基数(默认值),数字可以有小数部分,也可以有可选的指数部分(见§2.1)。在其他基中,只接受无符号整数

所以
tonumber(A0_3,16)
意味着我们期望
A0_3
是一个基数为16的数字(十六进制)。 一旦我们得到了
A0_3
的数值,我们就进行一些数学运算,最后将其转换为一个字符

function L0_0(A0_2)
  return (A0_2:gsub("..", function(A0_3)
        return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) % 256)
      end))
end
这段代码接受一个十六进制数字字符串并将其转换为字符。tonumber用于允许对值进行操作

下面是一个示例,演示了如何使用
Hello World

local str = "Hello World"
local hex_str = ''

for i = 1, #str do
    hex_string = hex_string .. string.format("%x", str:byte(i,i))
end

function L0_0(A0_2)
  return (A0_2:gsub("..", function(A0_3)
    return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) % 256)
  end))
end

local encoded = L0_0(hex_str)
print(encoded)
输出

);X_uuubjbe_uw

并将其返回到原始字符串:

function decode(A0_2)
  return (A0_2:gsub("..", function(A0_3)
    return string.char((tonumber(A0_3, 16) + 13) % 256)
  end))
end

hex_string = ''
for i = 1, #encoded do
    hex_string = hex_string .. string.format("%x", encoded:byte(i,i))
end

print(decode(hex_string))