Hashing ein array oder ein Objekt in python 3
Möchte ich hash ein einfaches array von strings
Die Dokumentation sagt, man kann nicht einfach die feed eine Zeichenfolge in hashlib die update () - Funktion,
so habe ich versucht, eine regelmäßige variable, aber dann hab ich die TypeError: object supporting the buffer API required
Fehler.
Hier ist, was ich bisher hatte
def generateHash(data):
# Prepare the project id hash
hashId = hashlib.md5()
hashId.update(data)
return hashId.hexdigest()
soweit ich weiß, sollten Sie in der Lage sein, zu füttern, eine Zeichenfolge in hashlib update-Funktion, könnten Sie mehr info?
InformationsquelleAutor skerit | 2013-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
repr()
- Funktion, um die (Unicode -) string-Repräsentation des Arrays (oder was auch immer Objekte, die Umstellung auf eine Darstellung). Dann codieren Sie die Zeichenfolge in UTF-8 (die Reihenfolge der bytes ist die gleiche wie überall bei der Verwendung von UTF-8). Die resultierenden bytes werden kann Hash als Sie versuchten oben:Druckt es auf meiner Konsole:
__repr__
gibt etwas, das nützlich ist-Eingabe für die hash-Funktion. hashlib Objekte selbst, zum Beispiel, repr() zu '<md5-HASH-Objekt @ 0x7fb503555a80>'. Auch ignorieren die bösen Auswirkungen, wenn diese verwendet wurden, für einige kryptographische operation, diese ist auch nicht deterministisch! Das gleiche Programm ausführen, die zu verschiedenen Zeiten nicht wieder den gleichen hash-Wert.Die Antwort ist in Bezug auf array von strings. Du hast Recht. Man sollte nicht mit hammer für alle arbeiten.
Sollten Sie immer noch versuchen, etwas zu verwenden, wie
",".join(data)
als__repr__
nicht garantiert werden, im Einklang mit zukünftigen Versionen. Vielleicht Python 4 zurück eine etwas andere Zeichenfolge (z.B.s'abc
statt'abc'
).Es ist unwahrscheinlich, dass. Sowieso, die Frage ist ziemlich alt, und die situation kann sich geändert haben. Die
','.join(data)
ist buggy wie['a,', 'bb']
würde zum gleichen Ergebnis führen wie['a', ',bb']
. Aber Sie haben Recht. Eine geeignete Funktion, die fängt die Darstellung des Arrays von strings und gibt Sie als Byte kann verwendet werden, für die Berechnung des hash-Wertes.InformationsquelleAutor pepr
Wenn Sie möchten, um die hash-Liste von Zeichenfolgen, eine naive Lösung könnte sein:
Jedoch vorsichtig sein, dass
['abc', 'efg']
und['a', 'bcefg']
würde hash auf den gleichen Wert.Wenn du mehr Kontext in Bezug auf Ihr Ziel, sind andere Lösungen besser geeignet sein könnten.
update
dauert bytes, so dass, wenn Sie Zeichenfolgen, die Sie benötigen, um Sie zu Kodieren ersten.Oh, wusste gar nicht, dass war ein Python ist3 Frage - sorry.
InformationsquelleAutor Thomas Orozco
Je nachdem, was Sie tun möchten ist, bekommen die hash alle Zeichenfolgen, die verkettet oder hash, der jede saite einzeln. erhalten Sie die Faust auf folgende Lösung, wie Thomas
m.update (); m.update(b) ist äquivalent zu m ist.update(a+b).
Oder die später folgenden beschrieben Lösung
Beachten Sie, dass gibt es eine Liste. Jedes element ist hash des entsprechenden Elementes in der angegebenen string-Liste
InformationsquelleAutor Moh Zah