当前位置:  开发笔记 > 编程语言 > 正文

使用.Net持久存储加密数据

如何解决《使用.Net持久存储加密数据》经验,为你挑选了1个好方法。

我需要在应用程序运行之间存储加密数据(很少的小字符串).我不希望用户每次启动应用程序时都提供密码.也就是说,它可以安全地存储加密密钥.

我正在研究RSACryptoServiceProvider并使用PersistentKeyInCsp,但我不确定它是如何工作的.密钥容器在应用程序运行或机器重启之间是否持久存在?如果是,是用户特定的还是特定于机器的.即如果我将加密数据存储在用户的漫游配置文件中,如果用户登录其他计算机,我可以解密数据吗?

如果以上不起作用,我有什么选择(我需要处理漫游配置文件).



1> Michael Petr..:

Data Protection API(DPAPI)完全符合您的要求.它使用机器的凭证或(更好的)用户作为加密密钥,提供任意数据的对称加密.您不必担心管理密钥; Windows会为您解决这个问题.如果用户更改了密码,Windows将使用用户的新密码重新加密数据.

使用System.Security.Cryptography.ProtectedData类在.NET中公开DPAPI:

byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser);

Protect方法的第二个参数是可选的熵字节数组,可用作附加的特定于应用程序的"秘密".

要解密,请使用ProtectedData.Unprotect调用:

byte[] encodedBytes = GetDataToUnprotect();
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser);

DPAPI正常工作与漫游配置文件(如描述在这里),但你需要加密的数据存储在一个地方(网络共享,IsolatedStorage与IsolatedStorageScope.Roaming等),你的各种机器可以访问.

有关详细信息,请参阅MSDN中的ProtectedData类.有一个DPAPI白皮书在这里,有比你以往任何时候都需要更多的信息.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有