RSACryptoProvider为相同的CspParameter ContainerName重复生成相同的密钥

时间:2010-07-15 13:32:06

标签: c# .net cryptography rsa

我是.NET CryptoProvider空间的新手,我对RSACryptoProvider重复创建相同密钥所看到的一点关注。 我正在使用容器,因为我将密钥存储在服务器上的文件中,就像这样(我在此创建之后导出CspBlob并稍后重新导入)...

_cp = new CspParameters { KeyContainerName = ContainerName };

在这种情况下,ContainerName具有我引用容器的硬编码值。 令我困扰的是,当我创建RSACryptoProvider时,通过exentsion键对,生成的键值总是相同的!

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(RSAKeySize, _cp);

如果我更改容器的名称,则密钥会更改。在创建RSACryptoProvider时,必须有一些其他的随机源而不是容器名称,对吗?否则,这会使容器的名称成为密码,这不是我的意图。

2 个答案:

答案 0 :(得分:2)

它是容器的名称,而不是生成器的名称。

如果您每次都需要不同的密钥,只需创建一个新的CryptoServiceProvider,不要引用容器(==存储的密钥对)。

答案 1 :(得分:0)

以下代码将删除与容器名相关的密钥(如果存在)。 删除密钥后;您可以使用相同的conatiner名称创建一个新的随机密钥。

            CspParameters cspParams = new CspParameters();
            // Specify the container name using the passed variable.
            cspParams.KeyContainerName = ContainerName;

            //Create a new instance of RSACryptoServiceProvider. 
            //Pass the CspParameters class to use the 
            //key in the container.
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams);

            //Delete the key entry in the container.
            rsa.PersistKeyInCsp = false;

            //Call Clear to release resources and delete the key from the container.
            rsa.Clear();
相关问题