我正在使用Lua为我的后端服务创建自定义身份验证层。 Nginx使用Lua模块和LuaJIT编译。它工作正常。我想对那些我在这些lua文件中提供服务的令牌进行一些加密,并希望没有人读取纯文本源文件。这些lua源文件是否可以编译成二进制文件或模糊/加密,以便Nginx的access_by_lua_file
指令仍能加载这些编译文件?我知道这不是一个完整的证明方法,但比纯文本更好。
答案 0 :(得分:1)
即使没有调试信息,Lua字符串也都存在于字节码中。查看存储在代码中的字符串需要无动机。
$ luajit -be 'print("hello world")' hello.out
$ luajit hello.out
hello world
$ xxd hello.out
0000000: 1b4c 4a01 0229 0200 0200 0200 0434 0000 .LJ..).......4..
0000010: 0025 0101 003e 0002 0147 0001 0010 6865 .%...>...G....he
0000020: 6c6c 6f20 776f 726c 640a 7072 696e 7400 llo world.print.
$ luajit -bl hello.out
-- BYTECODE -- hello.out:0-0
0001 GGET 0 0 ; "print"
0002 KSTR 1 1 ; "hello world"
0003 CALL 0 1 2
0004 RET0 0 1
如果您的计划是在字节码中隐藏加密令牌,我建议首先设计一种可逆方法,使用存储在源代码明文中的模糊版本(例如,对字符进行随机播放,对它们执行算术运算)等等......)