4

我在这里的另一篇文章中读到,诸如此类的代码会导致 .NET 将密钥从创建它的机器持久保存到随机密钥存储区(可能在注册表中)。这是真的吗?在什么条件下它会持续存在而不是持续存在?如果 key 是从字符串初始化的,持久性仍然会发生吗?

RSACryptoServiceProvider alg = new RSACryptoServiceProvider();

好像是真的?

http://blogs.msdn.com/b/winsdk/archive/2010/01/29/while-creating-cryptographic-keys-or-key-containers-repeatedly-your-hard-disk-may-get-filled-带有大量文件并且可能最终填充整个硬盘空间如果未删除.aspx

---- 现在我不确定.. 当我在我的机器上调试时 PersistInCspContainer 设置为 false。

4

1 回答 1

2

我认为混淆在于规范的这一部分:

PersistKeyInCsp当您在对象中指定密钥容器名称CspParameters并使用它来初始化 RSACryptoServiceProvider 对象时,该属性会自动设置为 true。KeyContainerName您可以使用该字段指定容器名称。如果您将该 PersistKeyInCsp属性设置为 true 而不使用对象初始化该 RSACryptoServiceProvider对象,则会创建CspParameters一个前缀为的随机密钥容器名称。"CLR"

在我看来,您必须提供CspParametersor 设置PersistKeyInCsp为 true 才能保留密钥。至少,我是这么读的,你的实验似乎是匹配的。

它可能类似于 PKCS#11 令牌;默认情况下,键是会话对象。

于 2013-01-28T21:59:14.680 回答