Python win32crypt.CryptProtectData介于2.5和3.1之间?

时间:2010-03-03 19:32:06

标签: python winapi python-3.x remote-desktop python-2.5

我正在尝试将密码哈希转储到.rdp文件中。我找到了一个(或多或少)显示如何执行此操作的网站here,但它在3.1中不起作用。

在2.5.4中我得到了这个:

>>> 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

在3.1中我得到了这个(3.1中的一切都是unicode所以只是抛弃了你“对吧?”:

>>> pwdHash = win32crypt.CryptProtectData("password",'psw',None,None,None,0)
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    pwdHash = win32crypt.CryptProtectData("password",'psw',None,None,None,0)
TypeError: expected an object with a buffer interface

好的,我之前看过那个错误,通常只是意味着我需要先转换为字节,所以:

>>> pwdHash = win32crypt.CryptProtectData("password".encode(),'psw',None,None,None,0)
>>> print(str(binascii.hexlify(pwdHash)).upper())
B'01000000D08C9DDF0115D1118C7A00C04FC297EB010000007E9E... blah, blah, blah
>>>

这似乎一切都很好但是当你将这个hexed值转储到.rdp文件时这不起作用,我只能假设那是因为它不是unicode字符串'password'的十六进制加密,而是一个字节'密码'的十六进制加密。我尝试过.decode(),但这正是您所期望的,并将十六进制加密字节转换为字符串,它不会为您提供原始unicode字符串的十六进制加密字符串。

对于win32crypt.CryptProtectData上的任何信息,我已经疯狂搜索了,我找不到有关为什么现在需要字节或缓冲区对象而不是字符串的任何有用信息。

有人可以帮忙吗? (或者是否有人知道将密码提供给远程桌面会话的更简单方法我是通过Python以编程方式打开的?呵呵)

1 个答案:

答案 0 :(得分:1)

请改用“密码”.encode('utf-16-le')。