2

我正在努力使这种加密解密正常工作。我正在使用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

返回false。请注意,我使用了相同的 snk 文件,以及我试图验证的相同的加密 xml 文档,为什么它会返回false?我错过了什么?

4

3 回答 3

2

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

于 2009-02-07T06:19:35.003 回答
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);

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

于 2009-01-20T22:26:18.090 回答
1

Good spot, left over cruft from the project I pulled it from. Library has been updated.

于 2009-01-30T14:46:34.957 回答