No hay código correspondiente "hexagonal mordisco" para struct.pack, por lo que se tendrá que empacar manualmente en bytes principio, como:
hex_string = 'abcdef12'
hexdigits = [int(x, 16) for x in hex_string]
data = ''.join(struct.pack('B', (high <<4) + low)
for high, low in zip(hexdigits[::2], hexdigits[1::2]))
O mejor, solo puedes usar el códec hexadecimal. es decir.
>>> data = hex_string.decode('hex')
>>> data
'\xab\xcd\xef\x12'
para desempaquetar, se puede codificar el resultado de nuevo a hexadecimal de manera similar
>>> data.encode('hex')
'abcdef12'
Sin embargo, cabe destacar que por su ejemplo, probablemente no hay necesidad de tomar el de ida y vuelta a través de una representación hexadecimal en absoluto cuando codifica Solo usa el resumen binario md5 directamente. es decir.
>>> x = md5.md5('some string')
>>> x.digest()
'Z\xc7I\xfb\xee\xc96\x07\xfc(\xd6f\xbe\x85\xe7:'
Esto es equivalente a la representación de su paquete() ed. Para obtener la representación hexadecimal, utilice el mismo método de desempaquetado arriba:
>>> x.digest().decode('hex')
'acbd18db4cc2f85cedef654fccc4a4d8'
>>> x.hexdigest()
'acbd18db4cc2f85cedef654fccc4a4d8'
[Editar]: Se ha actualizado para utilizar mejor método (códec hex)
tiene su terminología horriblemente confundida. – hop
@hop: Aparte de "hex binario", todo está bien. Hay una pequeña diferencia en el vocabulario entre idiomas. Me confundió al principio hasta que leí la definición del paquete de PHP(), pero es solo una cuestión de utilizar diferentes términos. – Brian