RC4 encrypt / decrypt codec

Опубликовано в QLua

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
			 }

Архив QLua