Ich versuche, ein Passwort zu hashen, um es in eine .rdp-Datei zu dumpen. Ich habe eine Seite gefunden, die mehr oder weniger zeigt, wie das geht hier, aber es funktioniert nicht in 3.1.
In 2.5.4 erhalte ich dies:
>>> import win32crypt
>>> import binascii
>>> pwdHash = win32crypt.CryptProtectData(u"password",u'psw',None,None,None,0)
>>> print str(binascii.hexlify(pwdHash)).upper()
01000000D08C9DDF0115D1118C7A00C04FC297EB010000007E9E... blah, blah blah
In 3.1 erhalte ich dies (alles ist Unicode in 3.1, also einfach das u" verwerfen?):
>>> pwdHash = win32crypt.CryptProtectData("password",'psw',None,None,None,0)
Traceback (most recent call last):
File "", line 1, in
pwdHash = win32crypt.CryptProtectData("password",'psw',None,None,None,0)
TypeError: expected an object with a buffer interface
OK, diesen Fehler habe ich schon einmal gesehen und normalerweise bedeutet das einfach, dass ich zuerst in Bytes konvertieren muss, also:
>>> pwdHash = win32crypt.CryptProtectData("password".encode(),'psw',None,None,None,0)
>>> print(str(binascii.hexlify(pwdHash)).upper())
B'01000000D08C9DDF0115D1118C7A00C04FC297EB010000007E9E... blah, blah, blah
>>>
Das scheint alles gut und schön zu sein, aber das funktioniert nicht, wenn Sie diesen hexed-Wert in eine .rdp-Datei dumpen, ich kann nur annehmen, dass dies daran liegt, dass es kein hex-crypt des Unicode-Strings 'password' ist, sondern ein hex-crypt der Bytes 'password'. Ich habe versucht, ein .decode() durchzuführen, aber das macht nur das, was man erwarten würde, und macht die hex-crypt Bytes zu einem String, es gibt Ihnen nicht den hex-crypt String für den originalen Unicode-String.
Ich habe wie verrückt nach Informationen zur win32crypt.CryptProtectData gesucht und ich kann keine nützlichen Informationen darüber finden, warum es jetzt ein Bytes- oder Pufferobjekt anstelle eines Strings erfordert.
Kann mir jemand helfen?
(oder kennt jemand einen einfacheren Weg, ein Passwort in eine Remote-Desktop-Sitzung einzuspeisen, die ich programmgesteuert über Python öffne? hehe)