123456789101112131415161718192021222324252627282930313233343536 |
- --this version actually works
- local tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- base64 = {
- enc = function(data)
- local l,out = 0,''
- local m = (3-data:len()%3)%3
- local d = data..string.rep('\0',m)
- for i=1,d:len() do
- l = bit.lshift(l,8)
- l = l+d:byte(i,i)
- if i%3==0 then
- for j=1,4 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:sub(1,-1-m)..string.rep('=',m)
- 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
- }
|