3

XP と Vista の間で "CryptUnprotectData" (Crypt32.dll から公開) に対して同じ呼び出しを使用しています。XPでは問題なく動作します。Vista で実行すると、次の例外が発生します。

"Decryption failed. Key not valid for use in specified state."

予想どおり、crypt32.dll のバージョンは XP と Vista で異なります (SP3 またはその他の更新の結果として、実際には XP の方が新しいバージョンになっています)。

より具体的には、データを暗号化してレジストリに入れ、「CryptUnprotectData」を使用して読み取りと復号化を行っています。UAC がオフになっています。

これを前に見た人はいますか?

4

2 に答える 2

4

CryptUnprotectData 関数のドキュメントには、通常、ユーザーが暗号化ツールと同じログオン資格情報を持っている場合にのみ機能すると記載されています。

これは、キーがユーザーの現在のトークンに関連付けられている可能性があることを示唆しています。あなたがVistaに言及しているので、これはUACと制限されたトークンを考えさせます。

コードを見せてもらえますか?データを使って何をしているのか、つまり、プロセス間、ユーザー間、またはコンピューター間でデータを移動しているかどうかについて、詳細を教えていただけますか?

于 2008-09-15T16:10:50.413 に答える
1

良い。うまくいけば、これが今週の骨頭の動きです! ;-)

これは、キーがユーザーの現在のトークンに関連付けられている可能性があることを示唆しています。

それだけでした。別のマシン (XP マシン) から暗号化されたデータを使用し、Vista マシンで復号化しようとしていたことが判明しました。

MSDN のドキュメントに次のように記載されています。

通常、暗号化者と同じログオン資格情報を持つユーザーのみがデータを復号化できます。さらに、暗号化と復号化は同じコンピューターで実行する必要があります。

Vista マシンでデータを再暗号化すると、復号化は期待どおりに機能します。

ありがとう。

于 2008-09-15T16:53:05.133 に答える