I’ve made some python functions to encode/decode base64. I’ve been trying to develop my own algorithm for base64 for the email protection script which can be found here.
Python again has proved itself again to be a great language for quickly developing stuff.
def tobase64(s, padd = False):
b64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
b64p = "="
ret = ""
left = 0
for i in range(0, len(s)):
if left == 0:
ret += b64s[ord(s[i]) >> 2]
left = 2
else:
if left == 6:
ret += b64s[ord(s[i - 1]) & 63]
ret += b64s[ord(s[i]) >> 2]
left = 2
else:
index1 = ord(s[i - 1]) & (2 ** left - 1)
index2 = ord(s[i]) >> (left + 2)
index = (index1 << (6 - left)) | index2
ret += b64s[index]
left += 2
if left != 0:
ret += b64s[(ord(s[len(s) - 1]) & (2 ** left - 1)) << (6 - left)]
if(padd):
for i in range(0, (4 - len(ret) % 4) % 4):
ret += b64p
return ret
def frombase64(s):
b64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
b64p = "="
ret = ""
s2 = s.replace(b64p, "")
left = 0
for i in range(0, len(s2)):
if left == 0:
left = 6
else:
value1 = b64s.index(s2[i - 1]) & (2 ** left - 1)
value2 = b64s.index(s2[i]) >> (left - 2)
value = (value1 << (8 - left)) | value2
ret += chr(value)
left -= 2
return ret
The algorithm doesn’t automaticly add the required =‘s while encoding, nor does it require while deencoding.