RC4 encrypt / decrypt codec
rc4 кодек для Lua
rc4 =
{ _ksa =
function(key)
local S = {}
for i = 0, 255 do
S[i] = i
end
local j = 0
local key_len = #key
for i = 0, 255 do
j = (j + S[i] + string.byte(key, (i % key_len) + 1)) & 0xFF
S[i], S[j] = S[j], S[i]
end
return S
end,
----------------------------------
_prga =
function(S,data)
local i, j = 0, 0
local out = {}
for n = 1, #data do
i = (i + 1) & 0xFF
j = (j + S[i]) & 0xFF
S[i], S[j] = S[j], S[i]
local K = S[(S[i] + S[j]) & 0xFF]
out[n] = string.char(string.byte(data, n) ~ K)
end
return table.concat(out)
end,
--------------------
crypt =
function(key, data)
return rc4._prga(rc4._ksa(key),data)
end
}
local rc4 = setmetatable(rc4,
{ __call =
function(t,key,data)
return t.crypt(key,data)
end
}
