История изменений
      
        Исправление
      ann_eesti,
      
        (текущая версия)
      :
    
попробуй luajit
заодно померяй, во сколько раз медленнее сишки –
local bit = require("bit")
function repeat_key(key, length)
    if #key >= length then
        return key:sub(1, length)
    end
    times = math.floor(length / #key)
    remain = length % #key
    result = ''
    for i = 1, times do
        result = result .. key
    end
    if remain > 0 then
        result = result .. key:sub(1, remain)
    end
    return result
end
function xor(message, key)
    rkey = repeat_key(key, #message)
    result = ''
    for i = 1, #message do
        k_char = rkey:sub(i, i)
        m_char = message:sub(i, i)
        k_byte = k_char:byte()
        m_byte = m_char:byte()
--        xor_byte = m_byte ~ k_byte
        xor_byte = bit.bxor(m_byte, k_byte)
        xor_char = string.char(xor_byte)
        result = result .. xor_char
    end
    return result
end
return xor
#!/usr/bin/env luajit
local xor = require 'xor'
local str = 'test string'
local key = 'key'
io.write(xor(str,key))
      
        Исходная версия
      ann_eesti,
      :
    
попробуй luajit