Hallo zusammen,
ich versuche mich per VBA in meine FritzBox einzuloggen um die Daten über die Heizungsthermostate, ... zu erhalten.
Zum Einloggen wird eine SessionID benötigt, welche über einen speziellen MD5 Hash erzeugt wird. Das ganze ist hier beschrieben:
https://avm.de/fileadmin/user_uploa...ttstellen/AVM_Technical_Note_-_Session_ID.pdf
Ich muss gestehen, dass ich Anhand der Erklärung nicht genau kapiert habe, was und wie das gemacht wird, ich habe aber den entsprechenden Code auch hier im Forum gefunden und für mich abgeleitet:
https://www.computerbase.de/forum/t...ng-der-sessionid-immer-lauter-nullen.1849375/
Im Kern geht es um diesen Code:
Das ganze Funktioniert mit Excel auf meinem Desktoprechner sehr gut.
Jetzt kommt das Problem: Auf meinem Tablet funktioniert der exakt gleiche Code nicht.
Ich habe das Problem auch schon eingegrenzt.
Hier wird beides mal kein Objekt erzeugt. Die beiden Objekte sind danach = Nothing
Selbst per Early-Binding, wenn ich den Verweis auf die mscorlib.dll setze, funktioniert es auf dem Tablet nicht.
Kann mir jemand sagen warum das so ist?
Gibt es eine alternative Lösung welche diese Objekte nicht nutzt?
Ich kann den MD5 Hash aus Strings erzeugen, was hier aber nicht funktioniert, da noch irgendwelche 0 Bytes eingefügt und davon dann die Hex Werte verwendet werden. Die Hex-Werte bekomme ich hin. Wenn ich diese dann hier unter Binary-Hash einfüge bekomme ich auch den korrekten Hash zurück.
http://www.fileformat.info/tool/hash.htm?hex=7400
Nur wie kann ich in VBA den Hash aus den Bytes erzeugen?
Ich hoffe ich habe mein Problem einigermaßen verständlich beschrieben und Danke euch schonmal jetzt für eure Hilfe!
Gruß
Thomas
ich versuche mich per VBA in meine FritzBox einzuloggen um die Daten über die Heizungsthermostate, ... zu erhalten.
Zum Einloggen wird eine SessionID benötigt, welche über einen speziellen MD5 Hash erzeugt wird. Das ganze ist hier beschrieben:
https://avm.de/fileadmin/user_uploa...ttstellen/AVM_Technical_Note_-_Session_ID.pdf
Ich muss gestehen, dass ich Anhand der Erklärung nicht genau kapiert habe, was und wie das gemacht wird, ich habe aber den entsprechenden Code auch hier im Forum gefunden und für mich abgeleitet:
https://www.computerbase.de/forum/t...ng-der-sessionid-immer-lauter-nullen.1849375/
Im Kern geht es um diesen Code:
Code:
Public Function mfGetFritzBoxMD5Hash_UTF16LE(Zeichenfolge As String) As String
'Das hier gibt keinen standard MD5 Hash zurück
'https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/AVM_Technical_Note_-_Session_ID.pdf
'Der MD5-Hash wird über die Bytefolge der UTF-16LE-Codierung dieses
'Strings gebildet (ohne BOM und ohne abschließende 0-Bytes).
'Aus Kompatibilitätsgründen muss für jedes Zeichen, dessen Unicode Codepoint > 255 ist, die
'Codierung des "."-Zeichens benutzt werden (0x2e 0x00 in UTF-16LE). Dies betrifft also alle
'Zeichen, die nicht in ISO-8859-1 dargestellt werden können, z. B. das Euro-Zeichen.
'Abschließend ein Beispiel mit deutschem Umlaut:
'Die Challenge
' <challenge> = "1234567z"
'kombiniert mit dem Kennwort
' <klartextpassword> = "äbc"
'ergibt den Wert
' <response> = "1234567z-9e224a41eeefa284df7bb0f26c2913e2"
'Vor der MD5 Codierung muss immer von UTF8(?) nach UTF16LE gewandelt werden.
On Error Resume Next
Dim MD5Hasher As Object
Dim TextToHash() As Byte
Dim bytes() As Byte
Dim pos As Long
Dim outstr As String
Dim oT As Object
Set oT = CreateObject("System.Text.UnicodeEncoding")
Set MD5Hasher = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
TextToHash = oT.GetBytes_4(Zeichenfolge)
bytes = MD5Hasher.computeHash_2(TextToHash)
outstr = ""
For pos = 1 To UBound(bytes) + 1
outstr = outstr & LCase(Right("0" & Hex(AscB(MidB(bytes, pos, 1))), 2))
Next pos
mfGetFritzBoxMD5Hash_UTF16LE = outstr
End Function
Das ganze Funktioniert mit Excel auf meinem Desktoprechner sehr gut.
Jetzt kommt das Problem: Auf meinem Tablet funktioniert der exakt gleiche Code nicht.
Ich habe das Problem auch schon eingegrenzt.
Code:
Set oT = CreateObject("System.Text.UnicodeEncoding")
Set MD5Hasher = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
Hier wird beides mal kein Objekt erzeugt. Die beiden Objekte sind danach = Nothing
Selbst per Early-Binding, wenn ich den Verweis auf die mscorlib.dll setze, funktioniert es auf dem Tablet nicht.
Kann mir jemand sagen warum das so ist?
Gibt es eine alternative Lösung welche diese Objekte nicht nutzt?
Ich kann den MD5 Hash aus Strings erzeugen, was hier aber nicht funktioniert, da noch irgendwelche 0 Bytes eingefügt und davon dann die Hex Werte verwendet werden. Die Hex-Werte bekomme ich hin. Wenn ich diese dann hier unter Binary-Hash einfüge bekomme ich auch den korrekten Hash zurück.
http://www.fileformat.info/tool/hash.htm?hex=7400
Nur wie kann ich in VBA den Hash aus den Bytes erzeugen?
Ich hoffe ich habe mein Problem einigermaßen verständlich beschrieben und Danke euch schonmal jetzt für eure Hilfe!
Gruß
Thomas