C# signedXml.CheckSignature始终返回false

C# signedXml.CheckSignature始终返回false,c#,cryptography,encryption,C#,Cryptography,Encryption,我正在努力使这个加密解密工作正常。 我正在使用Wolfwyrd提供的类和说明 代码如下: RSACryptoServiceProvider rsaKey = EncryptionUtils.GetRSAFromSnkFile(@"c\:a.snk"); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.PreserveWhitespace = true; xmlDoc.LoadXml("<foo />"); SignXml(xmlDoc

我正在努力使这个加密解密工作正常。 我正在使用Wolfwyrd提供的类和说明

代码如下:

RSACryptoServiceProvider rsaKey = EncryptionUtils.GetRSAFromSnkFile(@"c\:a.snk");

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml("<foo />");

SignXml(xmlDoc, rsaKey); //http://msdn.microsoft.com/en-us/library/ms229745.aspx

bool result = VerifyXml(xmlDoc, rsaKey); //http://msdn.microsoft.com/en-us/library/ms229950.aspx

System.Diagnostics.Debug.Write(result); //false
rsacyptoserviceprovider rsaKey=EncryptionUtils.GetRSAFromSnkFile(@“c\:a.snk”);
XmlDocument xmlDoc=新的XmlDocument();
xmlDoc.PreserveWhitespace=true;
xmlDoc.LoadXml(“”);
SignXml(xmlDoc,rsaKey)//http://msdn.microsoft.com/en-us/library/ms229745.aspx
bool result=VerifyXml(xmlDoc,rsaKey)//http://msdn.microsoft.com/en-us/library/ms229950.aspx
系统.诊断.调试.写入(结果)//假的

返回
false
。注意,我使用了同一个snk文件,它也是我试图验证的同一个加密xml文档,为什么它返回
false
?我遗漏了什么?

尝试将Wolfwyrd代码中GetRSAFromSnkBytes(byte[])的实现更改为:

private static RSACryptoServiceProvider GetRSAFromSnkBytes(byte[] snkBytes)
{
  if (snkBytes == null)
    throw new ArgumentNullException("snkBytes");

  RSAParameters param = GetRSAParameters(snkBytes);

  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  rsa.ImportParameters(param);
  return rsa;
}
我真的不明白为什么他首先生成一个密钥,然后将snk密钥导入到容器中,而不是从一个空密钥容器开始

你也可以考虑只使用.NET来生成密钥,而不是麻烦使用SNK格式。

如果将示例中的第一行更改为

RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(1024);

您的代码也可以很好地工作(您可以自己序列化生成的密钥)。

很好的地方,是我从项目中提取的剩余部分。库已更新。

谢谢你们的回复。我最终只是创建了一个私钥/公钥对,并使用它对文档进行签名,公钥与应用程序一起使用。如果我早看到这一点,我可能会使用它,但我相信其他人会发现它很有用。再次感谢