Adilol

Base64

Aug 3rd, 2011
561
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.53 KB | None | 0 0
  1. -- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <[email protected]>
  2. -- licensed under the terms of the LGPL2
  3.  
  4. -- character table string
  5. local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  6.  
  7. -- encoding
  8. function enc(data)
  9.     return ((data:gsub('.', function(x)
  10.         local r,b='',x:byte()
  11.         for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
  12.         return r;
  13.     end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
  14.         if (#x < 6) then return '' end
  15.         local c=0
  16.         for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
  17.         return b:sub(c+1,c+1)
  18.     end)..({ '', '==', '=' })[#data%3+1])
  19. end
  20.  
  21. -- decoding
  22. function dec(data)
  23.     data = string.gsub(data, '[^'..b..'=]', '')
  24.     return (data:gsub('.', function(x)
  25.         if (x == '=') then return '' end
  26.         local r,f='',(b:find(x)-1)
  27.         for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
  28.         return r;
  29.     end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
  30.         if (#x ~= 8) then return '' end
  31.         local c=0
  32.         for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
  33.         return string.char(c)
  34.     end))
  35. end
  36.  
  37. -- command line if not called as library
  38. if (arg ~= nil) then
  39.     local func = 'enc'
  40.     for n,v in ipairs(arg) do
  41.         if (n > 0) then
  42.             if (v == "-h") then print "base64.lua [-e] [-d] text/data" break
  43.             elseif (v == "-e") then func = 'enc'
  44.             elseif (v == "-d") then func = 'dec'
  45.             else print(_G[func](v)) end
  46.         end
  47.     end
  48. else
  49.     module('base64',package.seeall)
  50. end
Advertisement
Add Comment
Please, Sign In to add comment