当我将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框架
答案 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但不清楚它们是如何工作的以及它们实际上做了什么。