Nic*_*ick 29 c# windows-8 windows-runtime passwordvault
在Windows 8中将敏感数据保存到本地文件的最佳方法是什么?我正在开发一个需要存储oAuth令牌/密码的C#应用程序.我听说在.NET中加密/解密数据很常见,但我对这些机制没有任何经验.鉴于Windows 8应用程序拥有类似于Windows Phone的个人/受保护存储区域,是否仍建议使用加密?
此外,每次请求数据导致性能问题时,都不加密/解密?(编写自定义/ lite算法会更好吗?)
Rob*_*evy 48
更新:请注意,虽然现代/都市应用程序不会互相攻击,但桌面应用程序可以无限制地访问通过这些API存储的所有数据.请参阅http://www.hanselman.com/blog/SavingAndRetrievingBrowserAndOtherPasswords.aspx,其中包含演示此操作的代码.
Win8有一个名为PasswordVault的新API ,旨在为您解决所有这些难题.用户非常容易使用,安全且可以在其计算机之间漫游,因此他们只需输入一次凭据即可.我已成功将其用于OAuth令牌
检索凭证(注意WinRT引发的愚蠢异常......它们实际上应该只返回null):
const string VAULT_RESOURCE = "[My App] Credentials";
string UserName { get; set; };
string Password { get; set; };
var vault = new PasswordVault();
try
{
var creds = vault.FindAllByResource(VAULT_RESOURCE).FirstOrDefault();
if (creds != null)
{
UserName = creds.UserName;
Password = vault.Retrieve(VAULT_RESOURCE, UserName).Password;
}
}
catch(COMException)
{
// this exception likely means that no credentials have been stored
}
Run Code Online (Sandbox Code Playgroud)
存储凭据:
vault.Add(new PasswordCredential(VAULT_RESOURCE, UserName, Password));
Run Code Online (Sandbox Code Playgroud)
删除凭据(当用户单击应用中的注销按钮时):
vault.Remove(_vault.Retrieve(VAULT_RESOURCE, UserName));
Run Code Online (Sandbox Code Playgroud)