SHOW:
|
|
- or go back to the newest paste.
1 | - | -- Base64 |
1 | + | local b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" |
2 | - | |
2 | + | function encode(data) |
3 | - | -- Characters |
3 | + | return ((data:gsub('.', function(x) |
4 | - | local b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" |
4 | + | local r,b='',x:byte() |
5 | - | |
5 | + | for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end |
6 | - | -- Encoding |
6 | + | return r; |
7 | - | function encode(data) |
7 | + | end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) |
8 | - | return ((data:gsub('.', function(x) |
8 | + | if (#x < 6) then return '' end |
9 | - | local r,b='',x:byte() |
9 | + | local c=0 |
10 | - | for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end |
10 | + | for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end |
11 | - | return r; |
11 | + | return b:sub(c+1,c+1) |
12 | - | end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) |
12 | + | end)..({ '', '==', '=' })[#data%3+1]) |
13 | - | if (#x < 6) then return '' end |
13 | + | end |
14 | - | local c=0 |
14 | + | |
15 | - | for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end |
15 | + | function decode(data) |
16 | - | return b:sub(c+1,c+1) |
16 | + | data = string.gsub(data, '[^'..b..'=]', '') |
17 | - | end)..({ '', '==', '=' })[#data%3+1]) |
17 | + | return (data:gsub('.', function(x) |
18 | - | end |
18 | + | if (x == '=') then return '' end |
19 | - | |
19 | + | local r,f='',(b:find(x)-1) |
20 | - | -- Decoding |
20 | + | for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end |
21 | - | function decode(data) |
21 | + | return r; |
22 | - | data = string.gsub(data, '[^'..b..'=]', '') |
22 | + | end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) |
23 | - | return (data:gsub('.', function(x) |
23 | + | if (#x ~= 8) then return '' end |
24 | - | if (x == '=') then return '' end |
24 | + | local c=0 |
25 | - | local r,f='',(b:find(x)-1) |
25 | + | for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end |
26 | - | for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end |
26 | + | return string.char(c) |
27 | - | return r; |
27 | + | end)) |
28 | - | end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) |
28 | + |