我在 XP 和 Vista 之间使用相同的“CryptUnprotectData”调用(从 Crypt32.dll 公开)。在 XP 下运行良好。当我在 Vista 中运行时,出现以下异常:

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

正如预期的那样,XP 和 Vista 之间的 crypt32.dll 版本不同(XP 实际上有更新的版本,可能是 SP3 或其他更新的结果)。

更具体地说,我正在加密数据,将其放入注册表中,然后使用“CryptUnprotectData”读取和解密。UAC 已关闭。

有人见过这个吗?

有帮助吗?

解决方案

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

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

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

其他提示

好的。希望这是我本周最愚蠢的举动!;-)

这向我表明,也许密钥与用户当前令牌有关。

就是这样。结果我使用了另一台机器(XP 机器)的加密数据并尝试在 Vista 机器上解密。

正如 MSDN 文档所述:

通常,只有一个具有与加密机相同的登录凭证的用户可以解密数据。此外, 加密和解密必须在同一台计算机上进行。

一旦我在 Vista 机器上重新加密数据,解密就会按预期进行。

谢谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top