""" z = [] for i in range(26): z = z + [chr(ord('A')+i)] for i in range(26): z = z + [chr(ord('a')+i)] for i in range(10): z = z + [chr(ord('0')+i)] z = z + ['+','/'] """ z = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/') def encode(a): assert type(a) == bytes r = len(a)%3 if r == 1: a = a + bytes((0,0)) elif r == 2: a = a + bytes((0,)) n = len(a)//3 b = '' for i in range(n): h1 = a[i*3]//4 h2 = (a[i*3]-h1*4)*16 + a[i*3+1]//16 h3 = (a[i*3+1]%16)*4 + a[i*3+2]//64 h4 = a[i*3+2]%64 b = b + z[h1]+z[h2]+z[h3]+z[h4] if r == 1: # return b # DEBUG return b[:-2]+'==' elif r == 2: # return b # DEBUG return b[:-1]+'=' else: return b def decode(b): assert type(b) == str if b[-1] == '=': b = b[:-1]+'A' if b[-2] == '=': anhang = 2 b = b[:-2] + 'AA' else: anhang = 1 else: anhang = 0 n = len(b)//4 a = bytes(0) for i in range(n): a = a + bytes((z.index(b[i*4])*4+z.index(b[i*4+1])//16,)) a = a + bytes(((z.index(b[i*4+1])&15)*16+z.index(b[i*4+2])//4,)) a = a + bytes(((z.index(b[i*4+2])&3)*64+z.index(b[i*4+3]),)) if anhang == 1: return a[:-1] elif anhang == 2: return a[:-2] else: return a if __name__ == "__main__": import base64 print(encode(bytes('Polyfon zwitschernd aßen Mäxchens Vögel Rüben, Joghurt und Quark','utf-8'))) print(base64.b64encode(bytes('Polyfon zwitschernd aßen Mäxchens Vögel Rüben, Joghurt und Quark','utf-8'))) print('UG9seWZvbiB6d2l0c2NoZXJuZCBhw59lbiBNw6R4Y2hlbnMgVsO2Z2VsIFLDvGJlbiwgSm9naHVydCB1bmQgUXVhcms=') print(str(decode('UG9seWZvbiB6d2l0c2NoZXJuZCBhw59lbiBNw6R4Y2hlbnMgVsO2Z2VsIFLDvGJlbiwgSm9naHVydCB1bmQgUXVhcms='),'utf-8')) print(encode(bytes('ABCDäöüß','utf-8'))) print(base64.b64encode(bytes('ABCDäöüß','utf-8'))) print(encode(bytes('abcäöüß','utf-8'))) print(base64.b64encode(bytes('abcäöüß','utf-8'))) h = encode(bytes('abäöüß','utf-8')) print(h) print(str(decode(h),'utf-8')) print(base64.b64encode(bytes('abäöüß','utf-8')))