История изменений
Исправление 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