2011-01-16 2 views
0

У меня возникла проблема при попытке сгенерировать ключи с помощью ASP.NET (.NET 4) для RSA, RSACryptoServiceProvider выбрасывает недопустимые флаги, указанные исключением.ASP.NET RSACryptoServiceProvider throws Недопустимое исключение исключенных

[CryptographicException: указаны недопустимые флаги. ] System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 часов) +33 System.Security.Cryptography.Utils._GenerateKey (SafeProvHandle hProv, Int32 похолодевших, CspProviderFlags флаги, Int32 KeySize, SafeKeyHandle & HKEY) +0 системы. Security.Cryptography.Utils.GetKeyPairHelper (CspAlgorithmType KeyType, параметры CspParameters, булева randomKeyContainer, Int32 dwKeySize, safeProvHandle & safeProvHandle, SafeKeyHandle & safeKeyHandle) +9719339 System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() +89 System.Security.Cryptography .RSACryptoServiceProvider.ExportParameters (Boolean includePrivateParameters) +38 System.Security.Cryptography.RSA .ToXmlString (Boolean includePrivateParameters) +45

Я инициализировать RSA, используя этот код:

  var _cpsParameter = new CspParameters(); 
     _cpsParameter.Flags = CspProviderFlags.UseMachineKeyStore; 

     var rsaProvider = new RSACryptoServiceProvider(bitStrength, _cpsParameter); 

     string publicAndPrivateKeys = rsaProvider.ToXmlString(true); 
     string justPublicKey = rsaProvider.ToXmlString(false); 

Любая идея, как решить эту проблему?

ответ

0

Одним из возможных объяснений может быть то, что у вас уже есть неэкспортируемый ключ в контейнере ключей с именем «» (в этом случае .NET будет использовать существующий ключ вместо того, чтобы перезаписать его новым ключом).

Попробуйте этот код, а и посмотреть, если это делает разницу:

var cspParameters = new CspParameters(); 
    cspParameters.Flags = CspProviderFlags.UseMachineKeyStore; 
    cspParameters.KeyContainerName = Guid.NewGuid().ToString(); 

    var rsaProvider = new RSACryptoServiceProvider(bitStrength, cspParameters); 

    string publicAndPrivateKeys = rsaProvider.ToXmlString(true); 
    string justPublicKey = rsaProvider.ToXmlString(false); 
Смежные вопросы