问题
I have a file hashed to a standard md5 Hash
Correction: OpenSSL Hashes are HEXDECIMAL representations.
MD5 Hash: 57ED2E029BF9CA39383D2A671EF4FB50
I have a program that requires a byte encoding base64 md5 hash.
MD5 BASE64 byte: 8se7isyX+S6Yei1Ah9AhsQ==
How do you use pythons 'binascii' b2a methods to convert the standard MD5 hash to a Base64?
The below is wrong.
import binascii
bin = binascii.a2b_uu('57ED2E029BF9CA39383D2A671EF4FB50')
base = binascii.b2a_base64(bin)
Output +> 'QUlZTlYUmikRYUjRXkQjWQkiiSkmkhZmVjhZkWTAAAAA\n'
TL;DR:
I need to take hexstring, convert it to binary, and then base64 the binary.. what's the python way?
Reference:
- MD5 Hash and Base64 encoding
- https://docs.python.org/2/library/binascii.html
回答1:
Here's how you can do the conversion with binascii
. It requires two conversions, one from hex to binary and another from binary to base64.
>>> hex_hash = '4bd2f7940a1ec86efe1d1178b4cb23b7'
>>> binascii.b2a_base64(binascii.a2b_hex(hex_hash))
'S9L3lAoeyG7+HRF4tMsjtw==\n'
回答2:
The most important thing to realize was that the openssl md5 hash is calculated the same way as the hashlib.md5(..).hexdigest() method
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
来源:https://stackoverflow.com/questions/27383761/how-do-you-reencode-a-python-string-via-packing-and-unpacking-using-binascii