LINUX.ORG.RU

История изменений

Исправление 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