ich eine XML-Datei, dieMinimieren Sie die Informationen in einer Signatur Segment mit RSACryptoServiceProvider
<Licence>
<Name>Test company</Name>
<Version>1.1.1.1</Version>
<NumberOfServer>2</NumberOfServer>
</Licence>
ich dann mit einem vorherigen generierten privaten Schlüssel signieren die XML-Datei mit dem foloowing Code
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");
}
sieht wie folgt aus
Ich bekomme eine Datei wie folgt und das validiert mit dem öffentlichen Schlüssel!
<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>
ABER ich dort die SignedInfo Bereich haben müssen und wie kann ich es loswerden?
Ich verwende so etwas zu validieren.
_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. Ich dachte es mir irgendwie gut, aber irgendwie überzeugte ich mich zu glauben, dass es einfacher war. Vielen Dank. Gute Antwort. – Riri