我在这里的另一篇文章中读到,诸如此类的代码会导致 .NET 将密钥从创建它的机器持久保存到随机密钥存储区(可能在注册表中)。这是真的吗?在什么条件下它会持续存在而不是持续存在?如果 key 是从字符串初始化的,持久性仍然会发生吗?
RSACryptoServiceProvider alg = new RSACryptoServiceProvider();
好像是真的?
---- 现在我不确定.. 当我在我的机器上调试时 PersistInCspContainer 设置为 false。
我在这里的另一篇文章中读到,诸如此类的代码会导致 .NET 将密钥从创建它的机器持久保存到随机密钥存储区(可能在注册表中)。这是真的吗?在什么条件下它会持续存在而不是持续存在?如果 key 是从字符串初始化的,持久性仍然会发生吗?
RSACryptoServiceProvider alg = new RSACryptoServiceProvider();
好像是真的?
---- 现在我不确定.. 当我在我的机器上调试时 PersistInCspContainer 设置为 false。
我认为混淆在于规范的这一部分:
PersistKeyInCsp当您在对象中指定密钥容器名称CspParameters并使用它来初始化 RSACryptoServiceProvider 对象时,该属性会自动设置为 true。KeyContainerName您可以使用该字段指定容器名称。如果您将该PersistKeyInCsp属性设置为 true 而不使用对象初始化该RSACryptoServiceProvider对象,则会创建CspParameters一个前缀为的随机密钥容器名称。"CLR"
在我看来,您必须提供CspParametersor 设置PersistKeyInCsp为 true 才能保留密钥。至少,我是这么读的,你的实验似乎是匹配的。
它可能类似于 PKCS#11 令牌;默认情况下,键是会话对象。