1
我有一個看起來像這樣使用的RSACryptoServiceProvider
<Licence>
<Name>Test company</Name>
<Version>1.1.1.1</Version>
<NumberOfServer>2</NumberOfServer>
</Licence>
然後我用以前生成的私鑰使用foloowing代碼
private void SignFile(XmlDocument doc)
{
SignedXml signedXml = new SignedXml(doc2);
_cryptoServiceProvider.FromXmlString(XmlDocument.Load("private.key").Root.ToString());
signedXml.SigningKey = _cryptoServiceProvider;
Signature XMLSignature = signedXml.Signature;
Reference reference = new Reference("");
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
XMLSignature.SignedInfo.AddReference(reference);
signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
doc.DocumentElement.AppendChild(doc2.ImportNode(xmlDigitalSignature, true));
doc.Save("signed.xml");
}
簽署XML文件中的XML文件最小化的簽名段的信息
我得到一個看起來像這樣的文件,並用公鑰驗證!
<Licence>
<Name>Test company</Name>
<Version>1.1.1.1</Version>
<NumberOfServer>2</NumberOfServer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>tmGyr97mgGDviRpzcWjpMdNNMSI=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>Vc5R/OWiup4Rv7+1Tu8Ino83P0mh6npLkNYEaq0QVa6j+OvISOPERO57EllCQWdB1Lgjc7B+lmV4JiSvdfovkldhNZb4+iFgdrI+qOdSEIsBk/KhGS93PfekhDd3qirGerpeGbLAEqZ36jT0aT/QruZXpOX6Y6H5fqGj4prUZaM=</SignatureValue>
</Signature>
</Licence>
但我必須在那裏通過SignedInfo領域,我怎麼能擺脫它?
我使用類似的東西來驗證。
_cryptoServiceProvider.FromXmlString(XDocument.Load("public.key").Root.ToString());
XmlDocument doc = new XmlDocument();
doc.Load("signed.xml");
SignedXml signedXml = new SignedXml(doc);
XmlNodeList nodeList = doc.GetElementsByTagName("Signature");
signedXml.LoadXml((XmlElement)nodeList[0]);
bool valid = signedXml.CheckSignature(_cryptoServiceProvider);
OK。我善良的想法,但不知何故讓我相信自己變得更容易。謝謝。很好的答案。 – Riri 2009-04-17 20:08:14