--encode
function strToBytes(str)
local bytes = { str:byte(1, -1)
for i = 1, #bytes do
bytes[i] = bytes[i] + 100
end
return table.concat(bytes, ',')
end
--decode
function bytesToStr(str)
local function gsub(c)return string.char(c - 100) end
return str:gsub('(%d+),?', gsub) end
已实现:
str = "hello world"
strbyte = strToBytes(str)
bytestr = bytesToStr(strbyte)
print(strbyte)
输出:
204,201,208,208,211,132,219,211,214,208,200
print(bytestr) 输出:
“ Hello world”
嗨,我需要在上面改进我的代码。实际上,编码和解码功能可以正常工作,但我需要进行一些更改。
我想使编码函数类似于上面的代码,但是结果如下表所示:
{204,201,208,208,211,132,219,211,214,208,200}
然后,与我的第一个解码函数一样,表中的所有字节都应返回“ hello world”。
我希望上面的目的和解释易于理解。预先感谢您的任何帮助和建议。
更新说明:
解释我的目的有点复杂。但我会尽力解释。
我正在尝试使脚本成为编码器。编码功能在编码器脚本端,解码功能在编码的脚本端。因此,我必须在编码字符串之前编写串联解码功能。
为清楚起见,编码器脚本将加载未解码的源代码。
file = io.open(path, "r")
local data = file:read("*l")
问题是,表不能与字符串连接。
local data = encode(str)--the result is byte array
local data = "decode("..data..")"
file:write(data)
file:close()
local data = string.dump(load(data),true,true)
我的第一个目的是隐藏一些重要的字符串,因为string.dump结果不会隐藏所有字符串。 我的第二个目的是使用byteArray创建混淆的代码。
有什么解决办法或建议吗?
已解决
function strToBytes(str)
local byteArray= { str:byte(1, -1) }
for i = 1, #byteArray do
byteArray[i] = byteArray[i] + 100
encoded = '{' ..table.concat(byteArray, ',') .. '}'
end
return "load(string.dump(load(bytesToStr("..encoded.."))))()\n"
end
非常感谢您...
答案 0 :(得分:0)
您的代码与您要查找的代码非常接近。
holder
对于编码,我删除了table.concat,现在只返回byteArray
--encode
function strToBytes(str)
local byteArray= { str:byte(1, -1) }
for i = 1, #byteArray do
byteArray[i] = byteArray[i] + 100
end
return '{' .. table.concat(byteArray, ',') .. '}'
end
对于解码,我使用带有--decode
function bytesToStr(byteArray)
local output = "" --initialize output variable
for _,b in ipairs(byteArray) do --use ipairs to preserve order
output = output .. string.char(b - 100) --convert each byte to a char and add to output
end
return output
end
的for循环来遍历每个字节,并将值连接到输出变量中。
ipairs
测试输出:
{204,201,208,208,211,132,219,211,214,208,200,133}
return bytesToStr({204,201,208,208,211,132,219,211,214,208,200,133})
你好,世界!