Te sugerimos que pruebes esta solución en un ambiente controlado antes de pasarlo a producción, un saludo.
Solución:
Editar 26 ago 2020: Como sugiere Ali en los comentarios, usando codecs.encode(b, "base64")
daría como resultado saltos de línea adicionales para la sintaxis MIME. Solo use este método si desea dar formato a esos saltos de línea.
Para una codificación/descodificación Base64 simple, use base64.b64encode
y base64.b64decode
. Vea la respuesta de Ali para más detalles.
En Python 3, las codificaciones arbitrarias, incluidas Hex y Base64, se han movido a codecs
módulo. Para obtener un Base64 str
de un maleficio str
:
import codecs
hex = "10000000000002ae"
b64 = codecs.encode(codecs.decode(hex, 'hex'), 'base64').decode()
Python 2 tiene soporte nativo para la codificación HEX y base64:
encoded = HEX_STRING.decode("hex").encode("base64")
(si está utilizando Python 3, consulte las respuestas de Eana Hufwe o Ali)
La herramienta a la que se vincula simplemente interpreta el hexadecimal como bytes y luego codifica esos bytes en Base64.
O usa el binascii.unhexlify()
función para convertir de un hexadecimal string a bytes, o utilice el bytes.fromhex()
método de clase. Luego usa el binascii.b2a_base64()
función para convertir eso a Base64:
from binascii import unhexlify, b2a_base64
result = b2a_base64(unhexlify(hex_string))
o
from binascii import b2a_base64
result = b2a_base64(bytes.fromhex(hex_string))
En Python 2, también puede usar el str.decode()
y str.encode()
métodos para lograr lo mismo:
result = hex_string.decode('hex').encode('base64')
En Python 3, tendrías que usar el codecs.encode()
función para esto.
Demostración en Python 3:
>>> bytes.fromhex('10000000000002ae')
b'x10x00x00x00x00x00x02xae'
>>> from binascii import unhexlify, b2a_base64
>>> unhexlify('10000000000002ae')
b'x10x00x00x00x00x00x02xae'
>>> b2a_base64(bytes.fromhex('10000000000002ae'))
b'EAAAAAAAAq4=n'
>>> b2a_base64(unhexlify('10000000000002ae'))
b'EAAAAAAAAq4=n'
Demostración en Python 2.7:
>>> '10000000000002ae'.decode('hex')
'x10x00x00x00x00x00x02xae'
>>> '10000000000002ae'.decode('hex').encode('base64')
'EAAAAAAAAq4=n'
>>> from binascii import unhexlify, b2a_base64
>>> unhexlify('10000000000002ae')
'x10x00x00x00x00x00x02xae'
>>> b2a_base64(unhexlify('10000000000002ae'))
'EAAAAAAAAq4=n'
Calificaciones y comentarios
Si conservas alguna vacilación o forma de acrecentar nuestro enunciado eres capaz de añadir una observación y con placer lo ojearemos.