2010-07-15 68 views
0

我剛接觸.NET CryptoProvider空間,並且對我所看到的有關RSACryptoProvider重複創建相同密鑰的看法有點擔憂。 我使用的容器,因爲我存儲鍵關閉的服務器上的文件,像這樣(我出口CspBlob隨後這個創作,後來重新導入)...RSACryptoProvider爲同一個CspParameter ContainerName重複生成相同的密鑰

_cp = new CspParameters { KeyContainerName = ContainerName }; 

在這種情況下,容器名稱有一個硬編碼值,我通過引用容器。 什麼困擾我的是,當我創建了RSACryptoProvider,並通過exentsion密鑰對生成的鍵值都是一樣的!

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(RSAKeySize, _cp); 

如果我更改容器的名稱,密鑰更改。必須有隨機性比容器名稱的其他來源,當你創建一個RSACryptoProvider,對不對?否則,使容器的名稱成爲密碼,這不是我的意圖。

回答

1

這不是發電機的容器的名稱。

如果你想每次使用不同的密鑰,只需創建一個新的CryptoServiceProvider(不包括引用容器(==存儲的密鑰對))。

+0

權。所以如果我知道容器的名稱,我可以在任何地方重新創建相同的密鑰對! 這是非常安全的。這使容器的名稱成爲密碼。 – Bob 2010-07-15 14:02:37

+0

@Bob。呃沒有。該名稱的容器存儲在計算機的配置文件Application Data目錄中。如果您在同一臺計算機上按名稱打開該容器,它將向您顯示其中的密鑰。如果您嘗試在另一臺計算機上打開它,則無法提取。計算機在您第一次使用容器時自動生成密鑰,並在下次需要時保持安全。正如@亨克建議的,還有其他方法可以獲得*新*鍵。 – ewall 2010-07-15 14:24:18

+0

很好,明白了。這就是我需要的。密鑰的隨機性附加到我的配置文件和容器名稱。這對我行得通。謝謝。 – Bob 2010-07-15 14:46:02

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(); 
相關問題