在ROBLOX上的一个项目中,我正在寻找一个轻量级的纯Lua密码,它可以使用密钥快速加密和解密字符串。我一直在寻找,大多数解决方案都需要实现C库,或者对于我正在寻找的东西来说太重了。我不太了解加密,但它不应该是直截了当的,但不是太复杂。那里有一个我不知何故可以解决这个问题的图书馆吗?
答案 0 :(得分:0)
恰好在plc有一系列纯Lua加密程序,但是,这些程序使用Lua 5.3,而ROBLOX使用Lua 5.1.x.
Lua 5.3的优点是它包含位操作运算符。在5.3之前,Lua需要外部库来进行操作。 [嗯,不是真的,有纯Lua库使用math
函数进行位操作,例如lua-bit-numberlua,但Lua 5.3是这些类型程序的第一个实际版本。] Lua 5.3也支持64位整数,而以前的版本只支持双精度浮点数(53位整数)。
您当然可以使用32位整数在Lua 5.1中实现加密。一个简单的substitution cipher将是最容易开始的地方。
要实现的更有趣且合适的密码可能是solitaire
答案 1 :(得分:0)
以下是轻量级纯Lua密码的示例 它适用于没有外部库的Lua 5.1,5.2,5.3。
do
-- This is your secret 67-bit key (any random bits are OK)
local Key53 = 8186484168865098
local Key14 = 4887
local inv256
function encode(str)
if not inv256 then
inv256 = {}
for M = 0, 127 do
local inv = -1
repeat inv = inv + 2
until inv * (2*M + 1) % 256 == 1
inv256[M] = inv
end
end
local K, F = Key53, 16384 + Key14
return (str:gsub('.',
function(m)
local L = K % 274877906944 -- 2^38
local H = (K - L) / 274877906944
local M = H % 128
m = m:byte()
local c = (m * inv256[M] - (H - M) / 128) % 256
K = L * F + H + c + m
return ('%02x'):format(c)
end
))
end
function decode(str)
local K, F = Key53, 16384 + Key14
return (str:gsub('%x%x',
function(c)
local L = K % 274877906944 -- 2^38
local H = (K - L) / 274877906944
local M = H % 128
c = tonumber(c, 16)
local m = (c + (H - M) / 128) * (2*M + 1) % 256
K = L * F + H + c + m
return string.char(m)
end
))
end
end
local s = 'Hello world'
print( encode(s) ) --> 80897dfa1dd85ec196bc84
print(decode(encode(s))) --> Hello world
答案 2 :(得分:0)
最佳加密是您自己的加密。尝试做一些独特的事情,让某人猜测你的算法会更加困难。