--this version actually works local tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' base64 = { enc = function(data) local l,out = 0,'' local d = data..string.rep('\0',(3-data:len()%3)%3) for i=1,d:len() do l = bit.lshift(l,8) l = l+d:byte(i,i) if i%3==0 then while l > 0 do local a = bit.rshift(l,18)+1 out = out..tab:sub(a,a) l = bit.band(bit.lshift(l,6),0xFFFFFF) end end end return out..({'','==','='})[data:len()%3+1] end, dec = function(data) local a,b = data:gsub('=','A') local out = '' local l = 0 for i=1,a:len() do l=l+tab:find(a:sub(i,i))-1 if i%4==0 then out=out..string.char(bit.rshift(l,16),bit.band(bit.rshift(l,8),255),bit.band(l,255)) l=0 end l=bit.lshift(l,6) end return out:sub(1,-b-1) end }