将密码安全地存储在 Windows

Store passwords securely in Windows

目前,我将我的用户名和密码存储在 SQL Server CE 数据库中。

我想使用一些 Windows API 来安全地存储我的用户密码,这样机器上的其他应用程序 运行 就无法读取它们。

我支持Windows 7,所以我不能使用Password Vault

我尝试使用 CredWrite and CredRead API, based on the example provided here

然而,在我成功地存储和恢复我的密码的同时,我也成功地使用一个完全不同的应用程序恢复了它们。这意味着我唯一的安全是我正在使用的密钥。

还有其他可行的解决方案吗?

似乎任何使用 Windows Security Account Manager 的东西都不行。

使用Data Protection API (DPAPI)

数据受用户帐户凭据保护,因此可以由同一帐户下的其他应用程序 运行 检索。或者,您可以使用计算机凭据授予对服务的访问权限。

有关示例,请参阅 Example C Program: Using CryptProtectData

绝大多数应用程序都使用 DPAPI 来存储密码。

由于问题是用 C# 标记的:有一个 .NET managed wrapper around DPAPI,这比使用 Interop 代码更容易。

可以找到有关如何使用它的清晰示例 here

如果在命名空间 System.Security.Cryptography 中找不到类型 ProtectedData,请务必添加此 nuget package:

Install-Package System.Security.Cryptography.ProtectedData