2008-09-15 135 views
3

我在XP和Vista之間對「CryptUnprotectData」(從Crypt32.dll公開)使用相同的調用。在XP中正常工作。我得到以下異常,當我在Vista中運行:跨機器加密/解密是否否

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

正如預期的那樣,crypt32.dll的版本XP和Vista(W/XP實際上有更近,可能是由於SP3的結果,或者之間的不同一些其他更新)。

更具體地說,我正在加密數據,將其放入註冊表中,然後使用「CryptUnprotectData」進行讀取和解密。 UAC已關閉。

以前有人看過這個嗎?

+0

這是Windows API的一部分嗎?你使用C++嗎?您可能需要添加更多標籤。 – EndangeredMassa 2008-09-15 18:26:29

回答

4

CryptUnprotectData function文檔指出,它通常只在用戶具有與加密器相同的登錄憑據時纔有效。

這暗示了我可能關鍵是綁定到用戶的當前令牌。自從你提到Vista以後,這讓我想到了UAC和限制標記。

你能告訴我們一些代碼嗎?你能否給我們提供關於你對數據做什麼的更多信息 - 即你是否在流程,用戶或計算機之間移動它?

1

不錯。希望這是我一週的骨頭舉動! ;-)

這表明,我認爲關鍵可能 被綁定到用戶的當前令牌。

就是這樣。原來我使用的是另一臺機器(XP的機器)的加密數據,並試圖在Vista機器上解密。

作爲MSDN文檔狀態:

通常,只能用相同 登錄憑證與加密使用者可以 解密數據。另外,的 加密和解密必須在同一臺計算機上完成 。

一旦我在Vista機器上重新加密數據,解密將按預期工作。

謝謝。