跨机器加密/解密是禁忌

时间:2008-09-15 16:06:03

标签: encryption windows-vista cryptoapi

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

之前有人见过这个吗?

2 个答案:

答案 0 :(得分:4)

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

这告诉我,密钥可能与用户的当前令牌有关。既然你提到Vista,这让我觉得UAC和限制令牌。

你能告诉我们一些代码吗?您能否向我们提供有关您正在对数据执行的操作的更多信息 - 即您是在进程,用户还是计算机之间移动它?

答案 1 :(得分:1)

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

  

这对我来说可能是关键   与用户的当前令牌绑定。

就是这样。事实证明我使用的是另一台机器(XP机器)的加密数据,并试图在Vista机器上解密。

正如MSDN文档所述:

  

通常,只有用户才一样   登录凭据作为加密器可以   解密数据。另外,了   必须加密和解密   在同一台计算机上。

一旦我在Vista计算机上重新加密数据,解密就会按预期工作。

感谢。