RSACryptoProvider генерирует один и тот же ключ несколько раз для того же CspParameter ContainerName - PullRequest
1 голос
/ 15 июля 2010

Я новичок в пространстве .NET CryptoProvider, и меня немного беспокоит то, что я видел относительно повторного создания того же ключа RSACryptoProvider. Я использую контейнер, потому что храню ключ в файле на сервере, вот так (я экспортирую CspBlob после этого создания и импортирую его позже) ...

_cp = new CspParameters { KeyContainerName = ContainerName };

В этом случае ContainerName имеет жестко закодированное значение, на которое я ссылаюсь на контейнер. Что меня беспокоит, так это то, что когда я создаю RSACryptoProvider и путем расширения пары ключей, сгенерированные значения ключей всегда одинаковы!

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(RSAKeySize, _cp);

Если я изменю имя контейнера, ключ изменится. При создании RSACryptoProvider должен быть НЕКОТОРЫЙ другой источник случайности, кроме имени контейнера, верно? В противном случае это делает имя контейнера паролем, что не является моим намерением.

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Это имя контейнера , а не генератора.

Если вы хотите каждый раз использовать разные ключи, просто создайте новый CryptoServiceProvider без ссылки на контейнер (== сохраненопара ключей).

0 голосов
/ 21 декабря 2012

Следующий код удалит ключ (если существует), связанный с именем контейнера.После того, как вы удалите ключ;Вы можете создать новый с тем же именем 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();
...