如何解密CryptProtectData函数加密的数据?

时间:2014-04-21 16:12:05

标签: c++ winapi encryption

我知道CryptProtectData函数使用windows用户密码来隐藏数据,当我登录crypter用户时,我可以使用CryptUnprotectData函数对其进行解密,如何仅使用密码解密数据而不登录用户? / p>

2 个答案:

答案 0 :(得分:2)

CryptProtectData使用加密算法,该算法从环境变量(例如当前计算机ID和用户凭据)派生其密钥。这也意味着在大多数情况下你需要成为加密用户才能解密。

然而,有一个小小的警告,你可以绕过用户凭证进入密钥组成;但遗憾的是,您可以做的最好的事情就是加密任何用户在同一台计算机上解密的内容。

如提交here,您可以将dwFlags设置为“CRYPTPROTECT_LOCAL_MACHINE”(dwFlags是枚举,您只需将其设置为 uint 0)。 当您在加密的东西上调用CryptUnprotectData时,确保将dwFlags设置为uint(0),这两个函数将完全对称并且彼此之间可以正常工作。我亲自试过这个,可以证明它有效。

是的,这整个需要相同的机器系统真的很烦人,但它是迄今为止最安全的加密方式,并确保世界上没有其他计算机可以解密它。

希望这有帮助,           Nashwan。

答案 1 :(得分:0)

CryptProtectData可以使用CRYPTPROTECT_LOCAL_MACHINE标志,但这意味着任何用户都将解密。使用CRYPTPROTECT_LOCAL_MACHINE基本上不保护用户级别的任何内容,它只是使数据在机器级别受到保护(即便如此,具有漫游配置文件的用户也可以解密)。 如果您只需要使用密码保护某些内容,请考虑使用CryptGenKey和CryptEncrypt函数(页面底部提供的样本用于加密和解密文件)。

相关问题