将密码安全地存储在 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 的东西都不行。
CryptProtectData
存储数据
CryptUnprotectData
检索数据
数据受用户帐户凭据保护,因此可以由同一帐户下的其他应用程序 运行 检索。或者,您可以使用计算机凭据授予对服务的访问权限。
有关示例,请参阅 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
目前,我将我的用户名和密码存储在 SQL Server CE 数据库中。
我想使用一些 Windows API 来安全地存储我的用户密码,这样机器上的其他应用程序 运行 就无法读取它们。
我支持Windows 7,所以我不能使用Password Vault
我尝试使用 CredWrite and CredRead API, based on the example provided here。
然而,在我成功地存储和恢复我的密码的同时,我也成功地使用一个完全不同的应用程序恢复了它们。这意味着我唯一的安全是我正在使用的密钥。
还有其他可行的解决方案吗?
似乎任何使用 Windows Security Account Manager 的东西都不行。
CryptProtectData
存储数据CryptUnprotectData
检索数据
数据受用户帐户凭据保护,因此可以由同一帐户下的其他应用程序 运行 检索。或者,您可以使用计算机凭据授予对服务的访问权限。
有关示例,请参阅 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