Encryption ROBLOX Lua的低影响加密公式

Encryption ROBLOX Lua的低影响加密公式,encryption,lua,Encryption,Lua,在ROBLOX上的一个项目中,我正在寻找一种轻量级的纯Lua密码,它可以使用密钥相当快地加密和解密字符串。我一直在四处寻找,大多数解决方案都需要实现一个C库,或者对于我正在寻找的东西来说太重了。我对加密知道的不多,但它不应该太明显,但也不太复杂。是否有一个我不知何故遗漏的库可以解决这个问题?有一个纯Lua加密程序的集合,但是,这些程序使用Lua 5.3,而ROBLOX使用Lua 5.1.x LUA5.3的优点是它包含位操作操作符。在5.3之前,Lua需要外部库来进行位操作。[嗯,不是真的,有纯L

在ROBLOX上的一个项目中,我正在寻找一种轻量级的纯Lua密码,它可以使用密钥相当快地加密和解密字符串。我一直在四处寻找,大多数解决方案都需要实现一个C库,或者对于我正在寻找的东西来说太重了。我对加密知道的不多,但它不应该太明显,但也不太复杂。是否有一个我不知何故遗漏的库可以解决这个问题?

有一个纯Lua加密程序的集合,但是,这些程序使用Lua 5.3,而ROBLOX使用Lua 5.1.x

LUA5.3的优点是它包含位操作操作符。在5.3之前,Lua需要外部库来进行位操作。[嗯,不是真的,有纯Lua库可以使用
math
函数进行位操作,例如,但是Lua 5.3是这些类型程序的第一个实用版本。]Lua 5.3也支持64位整数,而以前的版本只支持双精度浮点(53位整数)

您当然可以使用32位整数在Lua5.1中实现加密。一个简单的开始是最容易的


要实现的更有趣、更合适的密码可能是

这里是一个轻量级纯Lua密码的示例。
它在Lua5.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

最好的加密是您自己的加密。尝试做一些独特的事情,别人会更难猜出你的算法。

这些功能正是我想要的。不太复杂,但不太明显。谢谢虽然可能,但我对加密的工作原理缺乏基本的了解。我的解决方案是使用string.byte转换所有内容,就是这样。谢谢你的建议,不过我找到了解决办法。