Если надо зашифровать сообщение, но не хватает ресурсов, можно использовать XOR.
Но нельзя использовать короткий циклический ключ, XOR хорош, когда можно получить рандомный ключ, равный длине сообщения.
Если в math.random нету дыр, то можно использовать его.
Функция подгоняет длину ключа к длине сообщения и прогоняет через XOR.
local function encrypt(message, key)
unicode = require('unicode')
nKey = ''
for i = 1, unicode.len(key) do
nKey = nKey..key:byte(i) -- переводим ключ в number
end
math.randomseed(tonumber(nKey)) -- засеиваем генератор ключом
tKey = {}
sNewKey = ''
for j = 1, unicode.len(message) do
tKey[j] = ''
while unicode.len(tKey[j]) ~= unicode.len(message.byte(j)) do
tKey[j] = tKey[j]..math.random(0, 9) -- создаем рандомный код для ключа
end
sNewKey = sNewKey..unicode.char(bit32.bxor(message:byte(j), tKey[j])) -- записваем результат
end
return sNewKey
end
Пример использования:
a = encrypt('сообщение', 'ключ') -- шифруем
print(encrypt(a, 'ключ')) -- расшифровываем