Skip to content

Instantly share code, notes, and snippets.

@bortels
Created December 6, 2011 05:56
Show Gist options
  • Save bortels/1436940 to your computer and use it in GitHub Desktop.
Save bortels/1436940 to your computer and use it in GitHub Desktop.
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
Copy link

Thanks bro, good code!

@rafis
Copy link

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
Copy link

hagope commented Apr 5, 2015

looks like you need one more end line 35

@yunyyyun
Copy link

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
Copy link

Hey. how to add support for another language?

@tormyvancool
Copy link

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" ?

Yes it's 8. He didn't correct it yet

@bortels
Copy link
Author

bortels commented Jun 1, 2021

"yet"? It's a decade old and not my code - I just copied/pasted it here for a project long ago. 7 years ago rafis posted a link to a proper version. Go use that. FWIW - It worked when I used it way back when. YMMV.

@sk556
Copy link

sk556 commented Jun 2, 2021

Giỏi.yith"÷%(×'

@sk556
Copy link

sk556 commented Jun 2, 2021

Higiy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment