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 已关闭。

有人见过这个吗?

4

2 回答 2

4

CryptUnprotectData 函数文档指出,它通常仅在用户具有与加密器相同的登录凭据时才有效。

这向我表明,密钥可能与用户当前的令牌相关联。既然你提到了 Vista,这让我想到了 UAC 和受限令牌。

你能给我们看一些代码吗?您能否向我们提供更多关于您正在处理数据的信息——即您是否在进程、用户或计算机之间移动数据?

于 2008-09-15T16:10:50.413 回答
1

好的。希望这是我本周的硬骨头动作!;-)

这向我表明,密钥可能与用户当前的令牌相关联。

就是这样。原来我正在使用另一台机器(XP 机器)的加密数据并试图在 Vista 机器上解密。

正如 MSDN 文档所述:

通常,只有具有与加密器相同的登录凭据的用户才能解密数据。此外,加密和解密必须在同一台计算机上完成。

Once I re-encrypted the data on the Vista machine, decryption works as expected.

Thanks.

于 2008-09-15T16:53:05.133 回答