你如何重新编码通过包装一个Python字符串,并使用binascii开箱?(How do you r

2019-10-21 09:47发布

我有散列成一个标准的MD5哈希文件

更正:OpenSSL的hash是HEXDECIMAL表示。

MD5 Hash:   57ED2E029BF9CA39383D2A671EF4FB50

我有一个需要字节的base64编码MD5哈希值的程序。

MD5 BASE64 byte: 8se7isyX+S6Yei1Ah9AhsQ==

如何使用蟒蛇“binascii” B2A方法标准MD5哈希转换为Base64编码?

以下是错误的。

import binascii 
bin = binascii.a2b_uu('57ED2E029BF9CA39383D2A671EF4FB50')
base = binascii.b2a_base64(bin) 

Output +> 'QUlZTlYUmikRYUjRXkQjWQkiiSkmkhZmVjhZkWTAAAAA\n'

TL; DR:

我需要的十六进制串值,将其转换为二进制,然后BASE64二进制..什么Python是这样?

参考:

  • MD5哈希和Base64编码
  • https://docs.python.org/2/library/binascii.html

Answer 1:

这里是你如何能做到与转换binascii 。 它需要两个转换,一个从十六进制到二进制和另一名来自二进制Base64。

>>> hex_hash = '4bd2f7940a1ec86efe1d1178b4cb23b7'
>>> binascii.b2a_base64(binascii.a2b_hex(hex_hash))
'S9L3lAoeyG7+HRF4tMsjtw==\n'


Answer 2:

要认识到的最重要的事情是,OpenSSL的MD5哈希值的计算方法为hashlib.md5(..)相同。hexdigest()方法

import base64
import hashlib    
hex_hash = hashlib.md5(open("putty_upx.exe").read()).hexdigest()
>> '4bd2f7940a1ec86efe1d1178b4cb23b7'
hex_hash.decode("hex")
>> 'K\xd2\xf7\x94\n\x1e\xc8n\xfe\x1d\x11x\xb4\xcb#\xb7'    
b64_md5_hash = base64.b64encode(hex_hash.decode("hex"))
>> 'S9L3lAoeyG7+HRF4tMsjtw=='
len(b64_md5_hash)
>> 24 


文章来源: How do you reencode a python string via Packing and Unpacking using binascii?