我在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 :(得分:4)
CryptUnprotectData function文档指出它通常仅在用户具有与加密器相同的登录凭据时才有效。
这告诉我,密钥可能与用户的当前令牌有关。既然你提到Vista,这让我觉得UAC和限制令牌。
你能告诉我们一些代码吗?您能否向我们提供有关您正在对数据执行的操作的更多信息 - 即您是在进程,用户还是计算机之间移动它?
答案 1 :(得分:1)
尼斯。希望这是我本周的骨头动作! ; - )
这对我来说可能是关键 与用户的当前令牌绑定。
就是这样。事实证明我使用的是另一台机器(XP机器)的加密数据,并试图在Vista机器上解密。
正如MSDN文档所述:
通常,只有用户才一样 登录凭据作为加密器可以 解密数据。另外,了 必须加密和解密 在同一台计算机上。
一旦我在Vista计算机上重新加密数据,解密就会按预期工作。
感谢。