我正在努力让这个加密解密工作正常。 我使用的是Wolfwyrd提供的this课程和this说明。
以下是代码:
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
返回false
。注意,我使用了相同的snk文件,并且我尝试验证的是相同的加密xml文档,为什么它会返回false
?我错过了什么?
答案 0 :(得分:2)
谢谢你们的回复。我最终只创建了一个私钥/公钥对,并使用它来签署文档,公钥随应用程序一起发送。如果我早点看到这个,我可能会用它,但我相信其他人会发现它很有用。再次感谢。
答案 1 :(得分:1)
尝试将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-key导入容器,而不是刚开始使用空密钥容器。
您也可以考虑使用.NET生成密钥,而不是使用snk格式。
如果您将示例中的第一行更改为
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(1024);
您的代码也可以正常工作(您可以自己序列化生成的密钥)。
答案 2 :(得分:1)
很好的地方,我从项目中抽出来了。图书馆已更新。