Moduł:Sandbox/Ksawi999/Koduj
Moduł służy do kodowania i dekodowania tekstu. Posiada on dwie funkcje: code (kodującą) i decode (dekodującą). Szablon implementujący ten moduł posiada również funkcję repair, która pozwala na "naprawienie" kodu przestarzałego lub zakodowanego w inny sposób. Pierwszy parametr (po nazwie funkcji) to tekst, który moduł ma zakodować, drugi parametr to klucz kodowania, a trzeci, opcjonalny parametr dotyczy sposobu kodowania (c, / lub * i ich dowolne kombinacje) i nie będzie uwzględniony przy dekodowaniu (aby rozkodować tekst nie trzeba pamiętać jakim sposobem się go zakodowało). Sposób kodowania "c" optymalizuje tekst do skopiowania i użycia w innym, niezależnym szablonie (zamienia | na | i = na =). Sposób kodowania "/" dodaje do zakodowanego tekstu rozdzielacze (//) w miejscach, w których występujące po sobie znaki tworzą tekst, który może zaburzyć działanie szablonu (podwójne nawiasy klamrowe) lub jest znakiem specjalnym (// lub **). Sposób kodowania "*" pozwala na zakodowanie znaków, których kod ASCII jest większy niż 126, np. polskich znaków. Kolejność znaków odpowiadających sposobie kodowania nie ma znaczenia.
Plusy modułu
- Szybki, wygodny i prosty w użyciu.
- Intuicyjny.
- Posiada zaawansowany system zabezpieczeń (przy użyciu szablonu Użytkownik:Ksawi999/sandbox/Lua/koduj, system ten jest jeszcze lepszy).
- Szansa na znalezienie klucza wynosi mniej niż 1/200000000 (gdy będą brane pod uwagę wszystkie klucze do długości 1000000 znaków).
- Możliwości na stworzenienie klucza jest praktycznie nieskończoność.
Plusy użycia szablonu (Użytkownik:Ksawi999/sandbox/Lua/koduj)
- Posiada bardzo przydatną funkcję - repair, która "naprawia" kod zakodowany innym sposobem (zakodowany tym modułem lub szablonem).
- Najbardziej zaawansowany system zabezpieczeń w internecie.
- Nikt oprócz ciebie nie może używać tego szablonu na twojej stronie użytkownika.
- Szablon generuje klucz automatycznie.
Minusy modułu
- Niemożliwe jest zakodowanie tekstu sformatowanego znacznikami HTML (ale wszystko inne już tak).
- Najprawdopodobniej ma jeszcze błędy (jeśli jakiś znalazłeś, proszę, abyś się ze mną skontaktował, np. na mojej dyskusji).
local p = {}
function p.code( data )
local str = data.args[1]
if str == nil then
return "nic"
end
local key = data.args[2]
if key == nil then
key = "!"
end
local codeKey = 0
local i1 = 1
while i1 <= key:len()
do
codeKey = codeKey + string.byte(key,i1)
i1 = i1 + 1
end
local result = ""
local i = 1
while i <= str:len()
do
local x = string.byte(str,i)
if x > 126 and string.find(data.args[3], "*") then
result = result.."**"
x = x - 95
end
if x <= 126 then
x = x - math.floor(((math.sin(codeKey + i) + 1) / 2) * 94)
if x < 32 then
x = x + 95
end
end
if i > 2 and (x == 47 or x == 42) and string.byte(str,i - 1) == x and string.byte(str,i - 2) ~= x then
result = result.."//"
end
if (x == 124 or x == 61) and string.find(data.args[3], "c") then
if x == 124 then
x = 33
end
if i > 1 and string.byte(result, -1) == 123 and string.find(data.args[3], "/") then
result = result.."//"
end
result = result.."{{"..string.char(x).."}}"
else result = result..string.char(x)
end
i = i + 1
end
return result
end
function p.decode( data )
local str = data.args[1]
if str == nil then
return "nic"
end
local key = data.args[2]
if key == nil then
key = "!"
end
local codeKey = 0
local i1 = 1
while i1 <= key:len()
do
codeKey = codeKey + string.byte(key,i1)
i1 = i1 + 1
end
local result = ""
local i = 1
local special = 0
local raise = false
while i + special <= str:len()
do
local x = string.byte(str,i + special)
if x <= 126 then
if i > 1 and (string.byte(str,i + special - 1) ~= 47 or x == 42) and i + special ~= str:len() and (x == 47 or x == 42) and (string.byte(str,i + special + 1) == 47 or string.byte(str,i + special + 1) == 42) then
special = special + 2
if x == 42 then
raise = true
end
x = string.byte(str,i + special)
end
x = x + math.floor(((math.sin(codeKey + i) + 1) / 2) * 94)
if x > 126 then
x = x - 95
end
end
if raise then
x = x + 95
raise = false
end
result = result..string.char(x)
i = i + 1
end
return result
end
return p