Frage

Pack verwenden () Funktion habe ich einen String in eine binäre Hex-Darstellung umgewandelt:

$string = md5(time); // 32 character length
$packed = pack('H*', $string);

H * Formatierungsmittel "Hex-String, hohe Tetrade zuerst".

Um dies in PHP entpacken, würde ich einfach die Verwendung auspacken () Funktion mit dem H * Format Flagge.

Wie würde ich diese Daten in Python entpacken?

War es hilfreich?

Lösung

Es gibt eine einfache Möglichkeit, dies mit dem binascii Modul zu tun:

>>> import binascii
>>> print binascii.hexlify("ABCZ")
'4142435a'

Wenn ich etwas über die knabbern Ordnung bin Mißverständnis (High-Nibble erste ist die Standardeinstellung), das sollte vollkommen ausreichend sein!

Darüber hinaus haben Pythons hashlib.md5 Objekte eine hexdigest() Methode, um automatisch die MD5 in einen ASCII-Hex-String zu konvertieren zu verdauen, so dass diese Methode nicht einmal notwendig ist für MD5-Prüfsummen. Hoffe, das hilft.

Andere Tipps

Es gibt keinen entsprechenden „hex knabbern“ Code für struct.pack, so müssen Sie entweder manuell in Bytes packen zuerst, wie:

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]))

oder besser, können Sie einfach den Hex-Codec verwenden. dh.

>>> data = hex_string.decode('hex')
>>> data
'\xab\xcd\xef\x12'

Zum Auspacken können Sie das Ergebnis kodieren zurück in ähnlicher Weise verhexen

>>> data.encode('hex')
'abcdef12'

Beachten Sie jedoch, dass für Ihr Beispiel, gibt es wahrscheinlich keine Notwendigkeit, den Round-Trip durch eine hexadezimale Darstellung überhaupt zu nehmen, wenn codieren. Verwenden Sie einfach die md5 binäre direkt verdauen. dh.

>>> x = md5.md5('some string')
>>> x.digest()
'Z\xc7I\xfb\xee\xc96\x07\xfc(\xd6f\xbe\x85\xe7:'

Dies entspricht Ihr pack () ed Darstellung. Um die hexadezimale Darstellung zu erhalten, verwendet die gleiche auspacken oben beschriebene Methode:

>>> x.digest().decode('hex')
'acbd18db4cc2f85cedef654fccc4a4d8'
>>> x.hexdigest()
'acbd18db4cc2f85cedef654fccc4a4d8'

[Bearbeiten]: Aktualisiert bessere Methode (hex-Codec) zu verwenden,

In Python verwenden Sie das struct Modul für diesen.

>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8

HTH

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top