使用用户密码加密

Encrypting using user's password

本文关键字:加密 密码 用户      更新时间:2023-10-16

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

有人知道怎么做吗?

谢谢!: -)

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

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

  1. 你想为你的用户提供完整的保护和加密,用户可以信任只有她才能解密,无论在什么情况下

  2. 你是一个企业IT经理,对所有员工都有严格的控制。您希望他们将业务数据加密作为其工作流的一部分,以便他们无法看到彼此的数据,但管理员可以愉快地读取每个人的数据。

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


那可能不是个好主意。原因:

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

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

总之,不要。请用户为您的数据设置一个专用的新密码,并仅用于此。

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

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

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

如何安全地存储密码

Win32 bcrypt: http://msdn.microsoft.com/en-us/library/aa375421%28v=vs.85%29.aspx