c# - 在 Windows 8 中保存敏感数据的最佳实践

标签 c# windows-8 windows-runtime passwordvault

在 Windows 8 中将敏感数据保存到本地文件的最佳方式是什么?我正在开发一个需要存储 oAuth token /密码的 C# 应用程序。我听说在 .NET 中加密/解密数据很常见,但我对这些机制没有任何经验。考虑到 Windows 8 应用程序有自己的个人/ protected 存储区域,类似于 Windows Phone,是否仍然建议/需要加密?

此外,每次请求数据时加密/解密不会导致性能问题吗? (编写自定义/精简算法会更好吗?)

最佳答案

更新:请注意,虽然现代/metro 应用程序不能访问彼此的内容,但桌面应用程序将可以不受限制地访问通过这些 API 存储的所有数据.参见 http://www.hanselman.com/blog/SavingAndRetrievingBrowserAndOtherPasswords.aspx其中包括演示这一点的代码。


Win8 有一个名为 PasswordVault 的新 API它专为您解决所有这些难题而设计。真正易于使用、安全,并且可以由用户配置为在他们的机器之间漫游,因此他们只需输入一次凭据。我已经成功地将它用于 OAuth token

检索凭据(注意 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
}

存储凭据:

vault.Add(new PasswordCredential(VAULT_RESOURCE, UserName, Password));

删除凭据(当用户单击您应用中的注销按钮时):

vault.Remove(_vault.Retrieve(VAULT_RESOURCE, UserName));

关于c# - 在 Windows 8 中保存敏感数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052482/

相关文章:

c# - WinRT 中(更新 ModifiedTime)中 "Touch"文件的优雅/高效方式?

c# - 错误 : await requires that the type have a suitable GetAwaiter method

c# - 从 10 位数字中获取所有可能的连续 4 位数字

c# - Windows 应用商店应用程序崩溃、质量报告和 CEIP

user-controls - 如何在 HeaderTemplate WinRT XAML 中绑定(bind)用户控件的 DependencyProperty?

windows-8 - 设置ToastNotification的背景

c# - 将完整的消息写入 NetworkStream 或写入每条消息的各个部分是个好主意吗?

C#执行变量代码

c# - 如何对图像应用 3D 变换?

xaml - 在 UWP 应用程序中覆盖 Pivot 标题前景画笔(Win 10 RTM SDK)