C# signedXml.CheckSignature始终返回false
我正在努力使这个加密解密工作正常。 我正在使用Wolfwyrd提供的类和说明 代码如下: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
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);
您的代码也可以很好地工作(您可以自己序列化生成的密钥)。很好的地方,是我从项目中提取的剩余部分。库已更新。谢谢你们的回复。我最终只是创建了一个私钥/公钥对,并使用它对文档进行签名,公钥与应用程序一起使用。如果我早看到这一点,我可能会使用它,但我相信其他人会发现它很有用。再次感谢