使用用户密码加密

TCS*_*TCS 5 c++ windows encryption winapi

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

有谁知道这是怎么做到的吗?

谢谢!:-)

R. *_*des 7

Windows数据保护API听起来像你需要什么.的CryptProtectData和CryptUnprotectData功能使用当前用户的登录凭证执行加密.


Ker*_* SB 3

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

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

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

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


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

实际密码不会存储在系统上(除非您有 Windows 3.11 或类似版本)。相反,仅存储密码的哈希值,并且在登录时对用户输入的密码进行哈希值并与存储的哈希值进行比较。

因此,您最多可以从系统中检索存储的哈希值(例如,如果您具有管理员权限)。但是,如果这是您可以继续进行的唯一数据,那么您创建的任何加密密钥都将从该哈希派生,而不是从实际密码派生。因此,任何有权访问系统的人都可以获取存储的哈希值,并从那里相对轻松地导出加密密钥。

简而言之,不要。要求用户为您的数据提供一个专用的、新的密码,并仅用于此目的。