HMAC SHA1 Python 3 vs. Python 2

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Jayson80
User
Beiträge: 3
Registriert: Dienstag 19. September 2017, 12:39

Hallo Leute,

ich habe ein kleines Problem und ich bekomme es einfach nicht hin.
Hoffe Ihr könnt mir weiter helfen. Ich versuche gerade eine Websocket
Verbindung mit meiner Loxone Hausautomation aufzubauen. Das
alles in Python 3. Ich muss um eine Verbindung aufzubauen einen
Key (den bekomme ich von der Loxone) zusammen mit meinem Password
und Usernamen hashen und dann wieder senden. Hier ein Auszug aus
dem Manual vom Hersteller:

"create a hash from the desired text (user:pass or visualization password) using
HMAC-SHA1"

Ich habe auf dieser Seite einen funktionierenden Code für Java und Python2 gefunden:
https://mattyboy.net/code/hmac-sha1-jav ... n-and-php/

Hier der Python Code von der Seite:

Code: Alles auswählen

import hmac
import hashlib
key = "0f2100e34b54d50fd0138f300d3497579dae5279"
data = "secret-message"
decodedKey = key.decode("hex")
hmac = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)
signature = hmac.digest().encode('base64')
print "key =", key
print "data =", data
print "signature =", signature
Den Code habe ich getestet sowohl in Java als auch in Python2. Die Verbindung
kann ich aufbauen wenn ich Python2 verwende. Bekomme dann ein alle Sensordaten
in Echtzeit zurück.

Jetzt aber mein Problem. Mit Python 3 bekomme ich ein anderes Ergebnis raus.
Ich bekomme es einfach nicht hin. Der "decodedKey" ist schon anders. Ich
habe bis jetzt nur mit Python2 zu tun gehabt. Ich benötige es aber in Python3.

Kann mir einer von euch helfen?
Wäre echt klasse.

Viele Grüße

Jayson
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin einfach nur den Fehlermeldungen gefolgt, und das hier ergibt denselben Hash fuer mich:

Code: Alles auswählen

from __future__ import print_function

import hmac
import hashlib
import codecs

key = "0f2100e34b54d50fd0138f300d3497579dae5279"
data = "secret-message"
decodedKey = codecs.decode(key.encode("ascii"), "hex")
hmac = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)
signature = codecs.encode(hmac.digest(), 'base64')
print("key =", key)
print( "data =", data)
print( "signature =", signature)
Jayson80
User
Beiträge: 3
Registriert: Dienstag 19. September 2017, 12:39

Hey Super vielen Dank. Habe es getestet und funktioniert.
Die Zeile war es:
decodedKey = codecs.decode(key.encode("ascii"), "hex")

Jetzt passt alles.

Vielen vielen Dank!!!
Antworten