Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Base64 encode/decode for Codea (Lua)
-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <alexthkloss@web.de>
-- licensed under the terms of the LGPL2
-- character table string
local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
-- encoding
function enc(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
-- decoding
function dec(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^(7-i) or 0) end
return string.char(c)
end))
@lucasgolino

This comment has been minimized.

Copy link

@lucasgolino lucasgolino commented Oct 28, 2013

Thanks bro, good code!

@rafis

This comment has been minimized.

Copy link

@rafis rafis commented Nov 13, 2013

from quick lookup seems missing end for dec() function, also dec() function works improperly, proper version is here http://lua-users.org/wiki/BaseSixtyFour

@hagope

This comment has been minimized.

Copy link

@hagope hagope commented Apr 5, 2015

looks like you need one more end line 35

@yunyyyun

This comment has been minimized.

Copy link

@yunyyyun yunyyyun commented Aug 1, 2017

in line 32 it mast be "for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end" ?

@Karakurt1988

This comment has been minimized.

Copy link

@Karakurt1988 Karakurt1988 commented Jan 13, 2020

Hey. how to add support for another language?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.