是否可以在不使用KeyContainerName的情况下签署xml文档?

我想创建2个非常简单的dll:

1)将签署一个xml文档2),它将检查xml文档是否未被修改。

我尝试使用RSACryptoServiceProvider和一个密钥容器。 但是当我移动到另一台机器时,这不起作用,因为钥匙存储在机器中。

我想将密钥存储在我创建的dll中(我知道这不是推荐的)但是我无法弄清楚如何编写一些代码来简单地签署一个xml文档然后validation它没有被更改。

所以我需要使用对称密钥来做我想要的这可能吗?

皮特

您已经提到了将私钥存储在dll中的问题,因此我不再重复。

做这个:

在您自己的机器上运行以下代码:

var key = new RSACryptoServiceProvider(2048); string publicKey = key.ToXmlString(false); string privateKey = key.ToXmlString(true); Console.WriteLine(publicKey); Console.WriteLine(privateKey); 

这会输出两条(长)线。 将它们复制到您的代码中:

标志:

 var privateKey = new RSACryptoServiceProvider(); privateKey.FromXmlString(/* insert the private-key XML string here */ ); privateKey.SignData(/*...*/); 

校验:

 var publicKey = new RSACryptoServiceProvider(); publicKey.FromXmlString(/* insert the public-key XML string here */ ); publicKey.VerifyData(/*...*/); 

如果要validation您的xml文档是否未被修改,则更容易实现简单的MD5校验和 (或任何其他良好的哈希算法),这正是您所需要的。 它也可以在不同的机器上validation。