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.