2015-12-04 4 views
0

Я создал контейнер RSA Key, используя следующий код. Клавиши создаются в контейнере, и я могу успешно зашифровать/дешифровать в контейнере.Проверить существующий контейнер RSA Key

public static void CreateKeyContainer() 
    { 
     RSACryptoServiceProvider rsa = null; 

     try 
     { 
      var cryptoParameters = new CspParameters(); 
      cryptoParameters.KeyContainerName = "MyContainer"; 
      cryptoParameters.Flags = CspProviderFlags.UseMachineKeyStore; 
      rsa = new RSACryptoServiceProvider(2048, cryptoParameters); 
     } 
     finally 
     { 
      if (rsa != null) 
      { 
       rsa.Clear(); 
       rsa.Dispose(); 
      } 
     } 
    } 

Перед вызовом метода CreateKeyContainer, я хотел бы убедиться, существуют ли уже ключи или нет в указанном контейнере. Я изменил флаг на CpsProviderFlags.UseExistingKey.

public static bool CheckIfKeysExist() 
    { 
     RSACryptoServiceProvider rsa = null; 

     try 
     { 
      var cryptoParameters = new CspParameters(); 
      cryptoParameters.KeyContainerName = "MyContainer"; 
      cryptoParameters.Flags = CspProviderFlags.UseExistingKey; 
      rsa = new RSACryptoServiceProvider(2048, cryptoParameters); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
     finally 
     { 
      if (rsa != null) 
      { 
       rsa.Clear(); 
       rsa.Dispose(); 
      } 
     } 
     return true; 
    } 

Однако при выполнении этого метода, он всегда бросает Cryptographic исключение, что «Keyset не существует», независимо от наличия ключа контейнера.

Как проверить, существует ли контейнер ключей?

ответ

0

Поскольку вы создаете ключ в хранилище ключей машины установить свойство Flags, как показано ниже:

cryptoParameters.Flags = CspProviderFlags.UseExistingKey | | CspProviderFlags.UseMachineKeyStore; 
+1

использования одного | для двоичного OR –

Смежные вопросы