-->

使用。NET加密数据的持久存储(Persistent storage of encrypted da

2019-07-21 18:21发布

我需要存储的应用程序运行之间的加密数据(一些小的字符串)。 我不希望用户每次他(她)启动该应用程序提供一个密码。 即毕竟它下降到安全存储加密密钥(S)。

我一直在寻找到的RSACryptoServiceProvider和使用PersistentKeyInCsp,但我不知道它是如何工作的。 是密钥容器应用程序运行或重新启动机器之间的执着? 如果是的话,它是用户特定的,或机器具体。 也就是说,如果我存储我的加密数据用户的漫游配置文件,我可以解密数据,如果在不同的机器上,用户登录?

如果以上不工作,我有哪些选择(我需要处理漫游配置文件)。

Answer 1:

数据保护API(DPAPI)不正是你想要的。 它提供了任意的数据的对称加密,使用机器或(更好)的用户的凭证,作为加密密钥。 您不必担心管理的关键; Windows会照顾的,对于你。 如果用户更改了密码,Windows将重新加密使用用户的新密码数据。

DPAPI暴露与System.Security.Cryptography.ProtectedData类.NET:

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

保护方法的第二个参数是可选的熵字节数组,其可以被用作附加的应用程序特定的“秘密”。

要解密,使用ProtectedData.Unprotect电话:

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

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

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



Answer 2:

我想补充的DPAPI方法。

虽然我还没有实现用户存储方法自己,这里为用户存储方法,其加密以及针对特定用户的数据进行解密微软文档。

我以前使用机器存储DPAPI。 我会形容它的情况下,它与你希望做什么适合。 我用了一个Windows服务加载Windows用户配置文件,并且用户的密码将用于加密数据。

作为一个侧面说明,DPAPI使用三重DES这可能是小幅下跌(比AES),但当时我不知道你在找什么类型的保护了。

Windows数据保护http://msdn.microsoft.com/en-us/library/ms995355.aspx



文章来源: Persistent storage of encrypted data using .Net