2016-04-21 6 views
0

Ich möchte die Hashlib-Funktion verwenden, die Byte-Darstellung von Zeichenfolgen erfordert. In diesem Beispiel aus der Python-Dokumentation lösen sie dies durch ein ‚b‘ vor dem String setzen:Python: Alternative zu binascii b-Funktion für vordefinierte Zeichenfolge

>>> import hashlib, binascii 
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000) 

Dies scheint nur zu arbeiten, wenn die Zeichenfolge im Funktionsaufruf definiert ist. Ich möchte vordefinierte Zeichenfolgen verwenden, aber ich kann nicht scheinen, die b-Funktion zu verwenden. Ich möchte etwas tun:

>>> import hashlib, binascii 
>>> mystr = 'password' 
>>> dk = hashlib.pbkdf2_hmac('sha256', b(mystr), b'salt', 100000) 

Oder

>>> dk = hashlib.pbkdf2_hmac('sha256', b mystr, b'salt', 100000) 

Offensichtlich nicht davon gearbeitet. Ich habe recherchiert und einige komplexere Lösungen gefunden, aber ich frage mich, ob es eine Lösung für vordefinierte Strings gibt, die so glatt ist wie für Strings, die direkt in der Funktion definiert sind.

Danke!

+0

Was einfach 'Bytes (mystr)'? –

+0

@ByteCommander Danke, das hat es geschafft! Ich musste eine Kodierung hinzufügen. 'bytes (mystr, 'utf8')' hat funktioniert! – reaktard

+0

Und dieses "b", von dem Sie gesprochen haben, ist keine Funktion und gehört nicht zum 'binascii'-Modul. Es ist eine integrierte Möglichkeit zum Erstellen von Byte-Literalen. –

Antwort

0

Also, was ist der Trick tat, war

bytes(mystr, 'utf8') 
Verwandte Themen