我想创建一个C#WinForms应用程序,它将为需要用户名和密码的服务器创建Web请求(基本身份验证)。
我想在运行应用程序的计算机上本地保存密码(当然是加密的)。
基本上,我需要在iOS中作为Keychain运行的东西,或者在eclipse中的“安全存储”,仅适用于.NET
我在Windows中找到了Credential Manager,但所有API示例都来自.NET Framework V2.0
Microsoft是否有关于如何在C#中使用它的普通API?
答案 0 :(得分:1)
Windows应用程序可以使用DPAPI作为数据保护API,它使用用户的登录凭据(使用用户的登录凭据)加密(间接)加密计算机上的机密。使用用户权限运行的任何进程都可以访问此数据。或者,如果您愿意,可以让用户添加自己的密码(对于这一项/秘密)(PrompStruct)。 DPAPI也可以通过C#访问(网上有例子)。
答案 1 :(得分:0)
您可以将凭据存储在app.config中的一个部分中,然后加密该部分(类似于您在web.config中为Web应用程序执行的操作)。
您可以使用SectionInformation.ProtectSection来保护该部分,使用SectionInformation.GetRawXml来检索加密信息(解密是透明地完成的)。
示例(摘自下面的MSDN文章):
static public void ProtectSection()
{
// Get the current configuration file.
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
// Get the section.
UrlsSection section =
(UrlsSection)config.GetSection("MyUrls");
// Protect (encrypt)the section.
section.SectionInformation.ProtectSection(
"RsaProtectedConfigurationProvider");
// Save the encrypted section.
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
// Display decrypted configuration
// section. Note, the system
// uses the Rsa provider to decrypt
// the section transparently.
string sectionXml =
section.SectionInformation.GetRawXml();
Console.WriteLine("Decrypted section:");
Console.WriteLine(sectionXml);
}
http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx