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

C++ 如何解密CryptProtectData函数加密的数据?,c++,winapi,encryption,C++,Winapi,Encryption,我知道CryptProtectData函数使用windows用户的密码对数据进行加密,当我登录crypter用户时,我可以使用CryptUnprotectData函数对其进行解密,如何才能仅使用密码而不使用登录用户对数据进行解密?CryptProtectData使用一种加密算法,该算法从环境变量(如当前机器ID和用户凭据)中获取其密钥。这也意味着在大多数情况下,您需要成为加密用户才能解密 但是,有一个小警告,您可以绕过用户凭据进入密钥的组成;但是不幸的是,你能做的最好的事情就是加密一些可以被同一

我知道CryptProtectData函数使用windows用户的密码对数据进行加密,当我登录crypter用户时,我可以使用CryptUnprotectData函数对其进行解密,如何才能仅使用密码而不使用登录用户对数据进行解密?

CryptProtectData使用一种加密算法,该算法从环境变量(如当前机器ID和用户凭据)中获取其密钥。这也意味着在大多数情况下,您需要成为加密用户才能解密

但是,有一个小警告,您可以绕过用户凭据进入密钥的组成;但是不幸的是,你能做的最好的事情就是加密一些可以被同一台机器上的任何用户解密的东西

如前所述,您可以将dwFlags设置为“CRYPTPROTECT_LOCAL_MACHINE”(dwFlags是一个枚举,您只需将其设置为uint 0)。 只要确保在对加密内容调用CryptUnprotectData时,也将dwFlags设置为uint(0),这两个函数将完全对称,并且彼此工作良好。我亲自尝试过,可以证明它是有效的

是的,这整个需要同一台机器的系统真的很烦人,但这是迄今为止加密某些东西并确保世界上没有其他计算机可以解密的最安全的方法

希望这有帮助,
Nashwan。

CryptProtectData可以使用CRYPTPROTECT\u LOCAL\u机器标志,但这意味着任何用户都将解密。使用CRYPTPROTECT\u LOCAL\u MACHINE基本上不保护用户级别的任何内容,它只是使数据在机器级别受到保护(即使如此,具有漫游配置文件的用户也可以解密)。
如果你只需要用密码保护一些东西,就可以考虑使用CurtGKEKEY和函数(页面底部提供的加密和解密文件的样本).< /P> PSSH,所以所有程序都必须在用户的上下文中运行,并且它能够为给定的散列解密密码。