使用用户密码加密

时间:2011-09-06 10:25:14

标签: c++ windows winapi encryption

我想使用WINAPI在Windows机器上使用登录用户的密码加密给定数据。我一直在寻找一个使用令牌(或类似的东西)的功能,但我找不到。

有谁知道怎么做?

谢谢! : - )

4 个答案:

答案 0 :(得分:7)

Windows Data Protection API听起来就像你需要的那样。 CryptProtectData and CryptUnprotectData函数使用当前用户的登录凭据执行加密。

答案 1 :(得分:3)

我之前写过这个答案但后来又重新考虑了,因为我之前没有听说过DPAPI。但是,经过进一步考虑,我想提出以下意见。这里重要的序言是,这一切都取决于你的需求。我想到了两种相互矛盾的可能性:

  1. 您希望提供用户完整的保护和加密,用户可以信任,只要她能够解密,无论情况如何。

  2. 您是一名企业IT经理,所有员工都处于紧张状态。您希望他们将业务数据加密为工作流程的一部分,以便他们无法看到彼此的数据,但管理员可以愉快地阅读每个人的数据。

  3. 如果您处于情况(2),那么现在停止阅读并使用DPAPI,这非常适合这种情况。如果您更喜欢方案(1),请阅读下面的原始答案。


    这可能不是一个好主意。原因如下:

    实际密码不会存储在系统上(除非你有Windows 3.11或类似的东西)。相反,只会存储密码的哈希值,并且在登录时将用户输入的密码进行哈希处理并与存储的哈希值进行比较。

    所以最多你可以从系统中检索存储的哈希值(如果你有管理员权限,比方说)。但是,如果这是您可以继续使用的唯一数据,那么您所做的任何加密密钥都将从该哈希值派生而不是从实际密码派生。因此,任何有权访问系统的人都可以访问存储的哈希值,并从那里相对容易地得到加密密钥。

    总之,不要。要求用户为您的数据提供专用的新密码,并仅将其用于此。

答案 2 :(得分:0)

使用Kerberos(基于Linux的身份验证服务器或使用Kerberos的其他服务器)/ LDAP框架(Windows服务器),而不是设计自己的登录算法。

Windows平台SDK&第三方库具有这些框架的连接器。

MSDN中有关Kerberos的更多信息:http://msdn.microsoft.com/en-us/library/ff649429.aspx

答案 3 :(得分:-1)