VS2010下的DSACryptoServiceProvider.EncriptionPrivateKey停止工作

时间:2011-01-12 22:33:38

标签: .net visual-studio-2010 exception

当我将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

任何想法为什么以及如何解决?

非常感谢!

P.S。我仍然使用.NET 3.5框架

1 个答案:

答案 0 :(得分:0)

诀窍是我从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但不清楚它们是如何工作的以及它们实际上做了什么。