Code Snippet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' function encode(data) return ((data:gsub( '.' , function(x) local r,b = '',x:byte() for i = 8 , 1 , - 1 do r = r..(b % 2 ^i - b % 2 ^(i - 1 )> 0 and '1' or '0' ) end return r; end).. '0000' ):gsub( '%d%d%d?%d?%d?%d?' , function(x) if ( #x < 6) then return '' end local c = 0 for i = 1 , 6 do c = c + (x:sub(i,i) = = '1' and 2 ^( 6 - i) or 0 ) end return b:sub(c + 1 ,c + 1 ) end)..({ ' ', ' = = ', ' = ' })[ #data%3+1]) end function decode(data) data = string.gsub(data, '[^' ..b.. '=]' , '') return (data:gsub( '.' , function(x) if (x = = '=' ) then return '' end local r,f = '',(b:find(x) - 1 ) for i = 6 , 1 , - 1 do r = r..(f % 2 ^i - f % 2 ^(i - 1 )> 0 and '1' or '0' ) end return r; end):gsub( '%d%d%d?%d?%d?%d?%d?%d?' , function(x) if ( #x ~= 8) then return '' end local c = 0 for i = 1 , 8 do c = c + (x:sub(i,i) = = '1' and 2 ^( 8 - i) or 0 ) end return string.char(c) end)) end |
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > print(encode( "Hello world" )) SGVsbG8gd29ybGQ= > print(decode( "SGVsbG8gd29ybGQ=" )) Hello world > |