我想创建 2 个非常简单的 dll:
1) 将签署 xml 文档 2) 将检查 xml 文档是否被修改。
我尝试使用 RSACryptoServiceProvider 和密钥容器。但是当我移动到另一台机器时,这不起作用,因为密钥存储在机器中。
我想将密钥存储在我正在创建的 dll 中(我知道这不是推荐的),但我无法弄清楚如何编写一些代码来简单地签署一个 xml 文档,然后验证它是否没有被更改。
那么我需要使用对称密钥来做我想做的事吗?
皮特
我想创建 2 个非常简单的 dll:
1) 将签署 xml 文档 2) 将检查 xml 文档是否被修改。
我尝试使用 RSACryptoServiceProvider 和密钥容器。但是当我移动到另一台机器时,这不起作用,因为密钥存储在机器中。
我想将密钥存储在我正在创建的 dll 中(我知道这不是推荐的),但我无法弄清楚如何编写一些代码来简单地签署一个 xml 文档,然后验证它是否没有被更改。
那么我需要使用对称密钥来做我想做的事吗?
皮特
您已经提到将私钥存储在 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(/*...*/);
如果只是要验证您的 xml 文档没有被修改,那么简单的MD5 校验和(或任何其他好的散列算法)会更容易实现并且是您所需要的。它也可以在不同的机器上进行验证。