DSACryptoServiceProvider.EncriptionPrivateKey под VS2010 перестал работать - PullRequest
1 голос
/ 13 января 2011

Когда я преобразовываю свой проект VS2008 в VS2010 следующий код:

        private static readonly byte[] EncriptionPrivateKey = {
            0x07, 0x02, 0x00, 0x00,
            0x00, 0x22, 0x00, 0x00,
            0x44, 0x53, 0x53, 0x32,
            0x00, 0x04, 0x00, 0x00,
            ....

        CspParameters csp = new CspParameters(13, null, null)
            { Flags = CspProviderFlags.UseMachineKey}; 

        using (DSACryptoServiceProvider dsa = new DSACryptoServiceProvider(csp))
        {
            dsa.ImportCspBlob(EncriptionPrivateKey);

Перестал работать.выполнение метода ImportCspBlob вызывает CryptographicException:

Параметр неверен.

И в MSDN нет ничего об исключении в этом методе: http://msdn.microsoft.com/en-us/library/system.security.cryptography.dsacryptoserviceprovider.importcspblob.aspx

Есть идеи, почему и как решить?

Большое спасибо!

PS Я все еще использую .NET 3.5 framework

1 Ответ

0 голосов
/ 08 марта 2011

Хитрость заключалась в том, что я запустил тот код из MSTest, который был автоматически преобразован в .NET 4.0, и в результате приложение (и указанный исходный код) были запущены под .NET 4.0 с настройками, специфичными для .NET 4.0 ...

Зная, что позволило мне найти решение проблемы:

В оригинальном исходном коде:

CspParameters csp = new CspParameters(13, null, null)
   { Flags = CspProviderFlags.UseMachineKey};

Необходимо удалить назначение флага ... Я нашел описание этих ключей: http://msdn.microsoft.com/en-us/library/system.security.cryptography.cspproviderflags.aspx, но неясно, как они работают и что они на самом деле делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...