我知道CryptProtectData函数使用Windows用户的密码加密数据,当我登录密码用户时,我可以使用CryptUnprotectData函数解密它,如何可能只使用密码解密数据而不登录用户?
agyaoht71#
CryptProtectData使用一种加密算法,该算法从环境变量(如当前机器ID和用户凭据)中派生其密钥。这也意味着在大多数情况下,您需要成为加密用户才能解密。但是,有一个小警告,您可以绕过用户凭据进入密钥的组成;但遗憾的是,你能做的最好的就是加密一些可以被同一台机器上的任何用户解密的东西。如in the CryptProtectData documentation所示,您可以将dwFlags设置为“CRYPTPROTECT_LOCAL_MACHINE”(dwFlags是一个枚举,您可以简单地将其设置为 uint 0)。只要确保在加密的东西上调用CryptUnprotectData时也将dwFlags设置为uint(0),这两个函数将完全对称,并且彼此工作良好。我亲自尝试过,可以证明它有效。是的,这整个需要相同的机器系统变得非常烦人,但它是迄今为止最安全的方式来加密的东西,并确保没有其他计算机在世界上可以解密。
CryptProtectData
uxhixvfz2#
如果你只需要用密码来保护某些东西,可以考虑使用CryptGenKey和CryptEncrypt函数(页面底部提供了加密和解密文件的示例)。CryptProtectData可以使用CRYPTPROTECT_LOCAL_MACHINE标志,但这意味着任何用户都可以解密。使用CRYPTPROTECT_LOCAL_MACHINE基本上不保护用户级别的任何内容,它只是在机器级别保护数据(即使如此,具有漫游配置文件的用户也可以解密)。
2条答案
按热度按时间agyaoht71#
CryptProtectData使用一种加密算法,该算法从环境变量(如当前机器ID和用户凭据)中派生其密钥。这也意味着在大多数情况下,您需要成为加密用户才能解密。
但是,有一个小警告,您可以绕过用户凭据进入密钥的组成;但遗憾的是,你能做的最好的就是加密一些可以被同一台机器上的任何用户解密的东西。
如in the
CryptProtectData
documentation所示,您可以将dwFlags设置为“CRYPTPROTECT_LOCAL_MACHINE”(dwFlags是一个枚举,您可以简单地将其设置为 uint 0)。只要确保在加密的东西上调用CryptUnprotectData时也将dwFlags设置为uint(0),这两个函数将完全对称,并且彼此工作良好。我亲自尝试过,可以证明它有效。是的,这整个需要相同的机器系统变得非常烦人,但它是迄今为止最安全的方式来加密的东西,并确保没有其他计算机在世界上可以解密。
uxhixvfz2#
如果你只需要用密码来保护某些东西,可以考虑使用CryptGenKey和CryptEncrypt函数(页面底部提供了加密和解密文件的示例)。
CryptProtectData可以使用CRYPTPROTECT_LOCAL_MACHINE标志,但这意味着任何用户都可以解密。使用CRYPTPROTECT_LOCAL_MACHINE基本上不保护用户级别的任何内容,它只是在机器级别保护数据(即使如此,具有漫游配置文件的用户也可以解密)。