I’m reading 16 bytes from a binary buffer named
md5 = list(struct.unpack('16B', raw.read(16)))
This produces the following list:
>>> print(md5) >>> [25, 94, 158, 89, 108, 25, 125, 20, 138, 164, 84, 137, 250, 82, 150, 202]
I need to build a proper md5 string that I can then use to compare with any
Currently I’m doing it this way:
md5 = list(struct.unpack('16B', raw.read(16))) for i, b in enumerate(md5): md5[i] = hex(b) md5 = ''.join(md5).replace('0x', '')
This works, but I cannot help but feel I’m missing something. Is there a more straightforward conversion between the data in the buffer and the final string?
Note: I understand I have other types of digests. But currently I’m interested in solving the problem for an hexadecimal digest.
You can use
hexlify to convert a
bytes (Python 3) / binary
str (Python 2) into a hex string (the string will be
bytes on Python 3, so we need
.decode('ascii') there to match against the
hexdigest that is a
from binascii import hexlify hex_string = hexlify(raw.read(16)).decode('ascii') if md5.hexdigest() == hex_string: ...
Likewise you can compare the raw bytes with the
hexdigest() is just 32-character readable representation of the 16-byte value that is the actual MD5 digest sum.
the_bytes = raw.read(16) if md5.digest() == the_bytes: ...