Python中的Hex到Base64转换

Rea*_*oob 10 python base64 hex

我想将一个简单的HEX字符串(例如10000000000002ae)转换为Base 64.

十六进制字符串将转换为字节,然后将字节编码为base64表示法,因此该字符串的预期输出:EAAAAAAAAq4 =

我在网上找到了一个工具.http://tomeko.net/online_tools/hex_to_base64.php?lang=en

但是我需要在脚本中转换一堆HEX值.

Ean*_*fwe 23

在Python 3中,包括Hex和Base64在内的任意编码已移至codecs模块.str从十六进制获取Base64 str:

import codecs

hex = "10000000000002ae"
b64 = codecs.encode(codecs.decode(hex, 'hex'), 'base64').decode()
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,这在最后添加了一个换行符。 (3认同)
  • **警告!** 通过此答案,您将在每 76 个字节的输出后得到一个换行符,因为它会转换为多行 MIME base64。请参阅[我的答案](/sf/answers/4451673901/)进行正确的转换。 (2认同)

ppp*_*ery 13

Python本身支持HEX和base64编码:

encoded = HEX_STRING.decode("hex").encode("base64")
Run Code Online (Sandbox Code Playgroud)

  • 你正在使用python 3; 这个答案只适用于python 2(请参阅下面的答案,了解Python 3解决方案) (2认同)

Ali*_*Ali 13

from base64 import b64encode, b64decode

# hex -> base64
s = 'cafebabe'
b64 = b64encode(bytes.fromhex(s)).decode()
print('cafebabe in base64:', b64)

# base64 -> hex
s2 = b64decode(b64.encode()).hex()
print('yv66vg== in hex is:', s2)
assert s == s2
Run Code Online (Sandbox Code Playgroud)

这打印:

在 base64 中的 cafebabe:yv66vg==
yv66vg== 十六进制是:cafebabe

文档中的相关函数,hex to base64:

Base64 到十六进制:


我不明白为什么许多其他答案使它变得如此复杂。例如,截至 2020 年 8 月 26 日投票最多的答案:

  • 这里不需要codecs模块。
  • 该codecs模块base64.encodebytes(s)在幕后使用(请参阅此处的参考),因此它转换为多行 MIME base64,因此每 76 个字节的输出后您会得到一个新行。除非您通过电子邮件发送它,否则它很可能不是您想要的。

至于'utf-8'在编码字符串或解码字节时指定:它会增加不必要的噪音。默认情况下,Python 3 对字符串使用 utf-8 编码。标准库的作者将编码/解码方法的默认编码也设为 utf-8,这并非巧合,这样您就不必一遍又一遍地不必要地指定 utf-8 编码。


Mar*_*ers 10

您链接的工具只是将十六进制解释为字节,然后将这些字节编码为Base64.

使用binascii.unhexlify()函数将十六进制字符串转换为字节,或使用bytes.fromhex()类方法.然后使用该binascii.b2a_base64()函数将其转换为Base64:

from binascii import unhexlify, b2a_base64

result = b2a_base64(unhexlify(hex_string))
Run Code Online (Sandbox Code Playgroud)

要么

from binascii import b2a_base64

result = b2a_base64(bytes.fromhex(hex_string))
Run Code Online (Sandbox Code Playgroud)

在Python 2中,您还可以使用str.decode()和str.encode()方法来实现相同的目的:

result = hex_string.decode('hex').encode('base64')
Run Code Online (Sandbox Code Playgroud)

在Python 3中,您必须使用此codecs.encode()功能.

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'
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)