Codifique la representación de cadena de entero a base64 en Python 3

Estoy tratando de codificar un int en base64, estoy haciendo eso:

foo = 1 base64.b64encode(bytes(foo)) 

salida esperada: 'MQ=='

salida dada: b'AA=='

¿Qué estoy haciendo mal?

Edición: en Python 2.7.2 funciona correctamente

Prueba esto:

 foo = 1 base64.b64encode(bytes([foo])) 

o

 foo = 1 base64.b64encode(bytes(str(foo), 'ascii')) # Or, roughly equivalently: base64.b64encode(str(foo).encode('ascii')) 

El primer ejemplo codifica el entero 1 1 byte. El segundo ejemplo codifica la cadena de caracteres de 1 byte '1' .

Si inicializa los bytes (N) con un entero N, le dará bytes de longitud N inicializados con bytes nulos:

 >>> bytes(10) b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 

Lo que quieres es la cadena “1”; codifíquelo a bytes con:

 >>> "1".encode() b'1' 

ahora, base64 te dará b'MQ==' :

 >>> import base64 >>> base64.b64encode("1".encode()) b'MQ=='