Converter String para Hexadecimal com Python3

Na versão 2 do python podemos converter uma string para hexadecimal facilmente com a opção encode  com a seguinte sintaxe :


x = "Convertendo para Hexadecimal".encode("hex")
print(x)
>>> 436f6e76657274656e646f20706172612048657861646563696d616c

Podendo facilmente inverter o processo com a opção decode:


y = x.decode("hex")
print(y)
>>> 'Convertendo para Hexadecimal'

Infelizmente esses métodos não funcionam em python 3, mas felizmente podemos utilizar o módulo binascii para realizar a conversão.
Com o módulo binascii, podemos utilizar a função hexlify para codificar a frase em hexadecimal e a função unhexlify para decodificar.

A sintaxe é simples veja

Codificando para hexadecimal



frase = "Python Rocks!!"
binascii.hexlify(bytes(frase, "utf-8"))
b'507974686f6e20526f636b732121' 

Decodificando para ASCII


frase = "507974686f6e20526f636b732121"
binascii.unhexlify(bytes(frase, "utf-8"))
b'Python Rocks!!'

Perceba que temos que converter a string para bytes, especificar a codificação que no caso foi passado utf-8, o resultado final é a frase codificada ou decodificada em bytes, sendo necessário converter para string caso deseje.

Criei duas funções para codificar e decodificar já convertendo para string e removendo os excessos.



import binascii

def encode(text):
"""Convert a string to Hex"""
    encoded = binascii.hexlify(bytes(text, "utf-8"))
    encoded = str(encoded).strip("b")
    encoded = encoded.strip("'")
    return encoded
def decode(text):
"""Convert Hex to ASCII"""
    decoded = binascii.unhexlify(bytes(text, "utf-8"))
    decoded = str(decoded).strip("b")
    decoded = decoded.strip("'")
    return decoded


É isso ai um post rápido de final de ano =)!

Postado em por Rafael Santos.

Deixe um comentário