alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" def encode(byteArray): charArray = [0] * (((len(byteArray) + 2) // 3) * 4) val = 0 groupIndex = 0 groupCount = 0 for index, byte in enumerate(byteArray): if index % 3 == 0: val = (0xFF & byte) groupCount += 1 elif index % 3 == 1: val <<= 8 val |= (0xFF & byte) groupCount += 1 elif index % 3 == 2: val <<= 8 val |= (0xFFFF & byte) for i in range(4): charArray[groupIndex * 4 + (3 - i)] = alphabet[val & 0x3F] val >>= 6 groupIndex += 1 groupCount = 0 else: if groupCount > 0: for i in range(3 - groupCount): val <<= 8 for j in range(4): if j < 3 - groupCount: charArray[groupIndex * 4 + (3 - j)] = '=' val >>= 6 else: charArray[groupIndex * 4 + (3 - j)] = alphabet[val & 0x3F] val >>= 6 return "".join(charArray) s = 'adfdasf' t = encode(s.encode()) assert t=="YWRmZGFzZg=="