2

パスワードをハッシュして.rdpファイルにダンプしようとしています。ここで(多かれ少なかれ)それを行う方法を示しているサイトを見つけましたが、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ではすべてがユニコードなので、u "を捨てるだけですか?):

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

OK、私は以前にそのエラーを見たことがありますが、通常は最初にバイトに変換する必要があることを意味します。

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

これはすべてうまくいっているように見えますが、その16進値を.rdpファイルにダンプすると機能しません。これは、Unicode文字列「password」の16進暗号ではなく、16進暗号であるためと推測できます。バイトの「パスワード」。.decode()を試しましたが、これは期待どおりの動作を行い、hex-cryptバイトを文字列に変換します。元のUnicode文字列のhex-crypt文字列は提供されません。

私はwin32crypt.CryptProtectDataに関する情報に夢中になっているようにグーグルで検索しましたが、文字列ではなくバイトまたはバッファオブジェクトが必要になる理由についての有用な情報を見つけることができません。

誰か助けてもらえますか?
(または、Pythonを介してプログラムで開いているリモートデスクトップセッションにパスワードをフィードする簡単な方法を知っている人はいますか?hehe)

4

1 に答える 1

2

代わりに「password」.encode('utf-16-le')を使用してください。

于 2011-03-30T12:35:00.000 に答える