web-dev-qa-db-fra.com

Conversion Hex en Base64 en Python

Je veux convertir une chaîne HEX simple telle que 10000000000002ae en Base 64.

La chaîne hexadécimale doit être convertie en octets, lesquels sont ensuite codés en base64. La sortie attendue pour cette chaîne est: EAAAAAAAAq4 =

J'ai trouvé un outil en ligne. http://tomeko.net/online_tools/hex_to_base64.php?lang=fr

Mais j'ai un tas de valeurs HEX que je dois convertir en script.

9
React Native Noob

Python prend en charge nativement l'encodage HEX et base64:

encoded = HEX_STRING.decode("hex").encode("base64")
15
ppperry

Dans Python 3, des codages arbitraires, notamment Hex et Base64, ont été déplacés vers le module codecs. Pour obtenir une Base64 str à partir d'un hexagone str:

import codecs

hex = "10000000000002ae"
b64 = codecs.encode(codecs.decode(hex, 'hex'), 'base64').decode()
14
Eana Hufwe

L'outil auquel vous associez interprète simplement l'hexagone en tant qu'octets, puis code ces octets en Base64.

Utilisez la fonction binascii.unhexlify() pour convertir une chaîne hexadécimale en octets ou utilisez la méthode de classe bytes.fromhex() . Puis utilisez la fonction binascii.b2a_base64() pour le convertir en Base64:

from binascii import unhexlify, b2a_base64

result = b2a_base64(unhexlify(hex_string))

ou

from binascii import b2a_base64

result = b2a_base64(bytes.fromhex(hex_string))

En Python 2, vous pouvez également utiliser les méthodes str.decode() et str.encode() pour obtenir le même résultat:

result = hex_string.decode('hex').encode('base64')

En Python 3, vous devez utiliser la fonction codecs.encode() pour cela.

Démo en Python 3:

>>> bytes.fromhex('10000000000002ae')
b'\x10\x00\x00\x00\x00\x00\x02\xae'
>>> from binascii import unhexlify, b2a_base64
>>> unhexlify('10000000000002ae')
b'\x10\x00\x00\x00\x00\x00\x02\xae'
>>> b2a_base64(bytes.fromhex('10000000000002ae'))
b'EAAAAAAAAq4=\n'
>>> b2a_base64(unhexlify('10000000000002ae'))
b'EAAAAAAAAq4=\n'

Démo sur Python 2.7:

>>> '10000000000002ae'.decode('hex')
'\x10\x00\x00\x00\x00\x00\x02\xae'
>>> '10000000000002ae'.decode('hex').encode('base64')
'EAAAAAAAAq4=\n'
>>> from binascii import unhexlify, b2a_base64
>>> unhexlify('10000000000002ae')
'\x10\x00\x00\x00\x00\x00\x02\xae'
>>> b2a_base64(unhexlify('10000000000002ae'))
'EAAAAAAAAq4=\n'
10
Martijn Pieters

Python prend en charge nativement l'encodage HEX et base64:

import base64

def main():
    b16 = bytearray('10000000000002ae'.decode('hex'))
    b64 = base64.b64encode(b16)

    print b64
1
Israel Wenik

Si quelqu'un recherche un one-liner python3 (bash):

python -c "import codecs as c; print(c.encode(c.decode('10000000000002ae', 'hex'), 'base64').decode())"
0
not2qubit