C# DigestValue对于C中的不同输入XML是相同的#
我试图对一个XML文件进行签名,但不是对整个文件进行签名,而是对标记“soapenv:Body”中的所有内容进行签名。 他们给了我一个例子,我试图得到同样的结果,但首先我不能得到同样的值。 我得到的那个不会改变,无论输入是什么,我想如果我改变了标签中的值,每次我都会得到不同的DigestValue,但我没有。 我需要知道我做错了什么。 代码如下:C# DigestValue对于C中的不同输入XML是相同的#,c#,xml,xml-signature,C#,Xml,Xml Signature,我试图对一个XML文件进行签名,但不是对整个文件进行签名,而是对标记“soapenv:Body”中的所有内容进行签名。 他们给了我一个例子,我试图得到同样的结果,但首先我不能得到同样的值。 我得到的那个不会改变,无论输入是什么,我想如果我改变了标签中的值,每次我都会得到不同的DigestValue,但我没有。 我需要知道我做错了什么。 代码如下: doc.Load(xmlfileInput); XmlNodeLi
doc.Load(xmlfileInput);
XmlNodeList nodo = doc.DocumentElement.GetElementsByTagName("soapenv:Body");
string nodoxml = nodo.Item(0).InnerXml;
XmlDocument doc1 = new XmlDocument();
//doc.PreserveWhitespace = true;
doc1.LoadXml(nodoxml);
//Print content to sign
System.Console.WriteLine(doc1.OuterXml);
System.Console.WriteLine("---------------------------------------------------------------------------------------------");
SignedXml signer = new SignedXml(doc1);
byte[] pkBytes = File.ReadAllBytes(privateKey); //testkey.key
RsaPrivateCrtKeyParameters pkFactory = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.DecryptKey(passwordKey.ToCharArray(), pkBytes);
RSA key = DotNetUtilities.ToRSA(pkFactory);
signer.KeyInfo = new KeyInfo();
signer.KeyInfo.AddClause(new RSAKeyValue(key));
signer.SigningKey = key;
signer.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigCanonicalizationWithCommentsUrl;
Reference r = new Reference("");
XmlDsigXPathTransform XPathTransform = CreateXPathTransform(@"/dodas");
r.AddTransform(XPathTransform);
r.AddTransform(new XmlDsigEnvelopedSignatureTransform());
r.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";
signer.AddReference(r);
signer.ComputeSignature();
System.Console.WriteLine(signer.GetXml().OuterXml);
XmlNode nodeimported = doc.ImportNode(signer.GetXml().FirstChild.ParentNode, true);
doc.DocumentElement.GetElementsByTagName("dodas").Item(0).AppendChild(nodeimported);
string xmlFirmado = doc.OuterXml;
File.WriteAllText(xmlfileOutput, xmlFirmado);
//Éxito
System.Console.ForegroundColor = ConsoleColor.Green;
System.Console.WriteLine("Documento XML firmado con éxito!");
两次不同的运行在控制台中显示以下内容:第一个输出:
<mat:altaDoda xmlns:mat="http://impl.service.qrws.ce.siat.sat.gob.mx/siatbus/matce"><dodas><credenciales><!--Optional:--><ciec>
<!--Optional:--><Usuario>TEST1TEST1</Usuario>
<!--Optional:--><Contrasena>VMH94111</Contrasena></ciec>
<!--Optional:--><sellado><!--Optional:--><cadenaOriginalAA>kldffIL</cadenaOriginalAA><!--Optional:--><certificado64>kk9rtreljd</certificado64><!--Optional:--><firmado>||jkjkkkk|trtvl76767|jnkj3444||</firmado><!--Optional:--><serie>1234567890</serie></sellado></credenciales><!--1 or more repetitions:--><doda><!--Optional:--><datosGenerales><!--Optional:--><aduana>170</aduana><!--Optional:--><seccion>170</seccion><!--Optional:--><caat>123</caat><!--Optional:--><contenedores><!--Zero or more repetitions:--><contenedor><!--Zero or more repetitions:--><candados><!--Optional:--><valorCandado>valCandado01</valorCandado></candados><!--Optional:--><valorContenedor>valContenedor01</valorContenedor></contenedor></contenedores><!--Optional:--><idTransporte>890zxc</idTransporte><!--Optional:--><fastId /><!--Zero or more repetitions:--><tipoOperacion>1</tipoOperacion></datosGenerales><!--Optional:--><pedimentos><!--1 or more repetitions:--><pedimento><!--Optional:--><patenteAutorizacion>3904</patenteAutorizacion><!--Optional:--><documento>7100164</documento><!--Optional:--><numeroRemesa>2</numeroRemesa><!--Optional:--><dtaNiu>abc</dtaNiu><!--Optional:--><importeDifDolares>abc</importeDifDolares><!--Optional:--><importeEfectivoDolares>abc123</importeEfectivoDolares><!--Optional:--><umc>abc</umc><!--Optional:--><articulo7>0</articulo7><!--Optional:--><cove>12345</cove></pedimento></pedimentos></doda></dodas></mat:altaDoda>
---------------------------------------------------------------------------------------------
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://ww
w.w3.org/TR/1999/REC-xpath-19991116"><XPath>/dodas</XPath></Transform><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /><DigestValue>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</DigestValue
></Reference></SignedInfo><SignatureValue>PLeNmY5ryu348507jd1P8DXMAEXQWg5ProRS9SU7tPDTVGjn33u4qwtU0HW1GJVwd3NpiGvjJzOonVR7gmoV8FbZtWG0IpLL8jy7PRAppZEupAAmGlFnLR10MPHKlvnsZIsiVstGn+TBKzx/EqNxztrfNJUUH8Huc65YPlq3TEA=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>yapCI4cdFFHP+pJ8LtCH8TxWpaPm
NwhFMy2/K6HmOEbyGYD+J2F3YcMaDCUnaG22t3V90p4bjEDQvhu+QLNL7JOQFs8pEOfRWL0OP0YglwZ0UnuK9umGV4hGxlpuj9q/JT1hJMhYJgIXwjNd1vw0mDeXmrJzBQQNX0ShZd8T4AM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature>
Documento XML firmado con éxito!
测试1测试1
VMH94111
kldffILkk9rtreljd | | JKKKK | trtvl76767 | jnkj3444 | | | 123456789070123VALCANDO01VALCONTEDOR01890ZXC1390471001642ABCABC123ABC012345
---------------------------------------------------------------------------------------------
/dodas47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=PLENMY5RYU348507JD1P8DXMAEXQWGJ5PRORS9SU7TPDTVGJN33U4QWTU0HW1GJVWD3NPIGVJZZZZZZZV0IPLL8JY7PrappzeupaaMglFnll0MphKlVnsziVSTGN+TBKzx/EQNXRFJUH8UC65YPLQ3TEA=YAPCI4CFH0FHP+J8LTCH8TXWPM
NwhFMy2/K6HmOEbyGYD+J2F3YcMaDCUnaG22t3V90p4bjEDQvhu+QNL7JOQFS8PEOFRL0OP0YGLWZ0UNUNUK9UMGV4HGXLPUJ9Q/JT1HJMHYJGIXWJND1VW0MDEXMRJZBQNX0SHZD8T4AM=AQAB
Documento XML firmado conéxito!
第二个输出是:
<mat:altaDoda xmlns:mat="http://impl.service.qrws.ce.siat.sat.gob.mx/siatbus/matce"><dodas><credenciales><!--Optional:--><ciec>
<!--Optional:--><Usuario>ANOTHERTEST2TEST2</Usuario>
<!--Optional:--><Contrasena>VMH94111</Contrasena></ciec>
<!--Optional:--><sellado><!--Optional:--><cadenaOriginalAA>kldffI
L</cadenaOriginalAA><!--Optional:--><certificado64>kk9rtreljd</certificado64><!--Optional:--><firmado>||jkjkkkk|trtvl76767|jnkj3444||</firmado><!--Optional:--><serie>1234567890</serie></sellado></credenciales><!--1 or more repetitions:--><doda><!--Optional:--><datosGenerales><!--Optional:--><aduana>
170</aduana><!--Optional:--><seccion>170</seccion><!--Optional:--><caat>123</caat><!--Optional:--><contenedores><!--Zero or more repetitions:--><contenedor><!--Zero or more repetitions:--><candados><!--Optional:--><valorCandado>valCandado01</valorCandado></candados><!--Optional:--><valorContenedor>v
alContenedor01</valorContenedor></contenedor></contenedores><!--Optional:--><idTransporte>890zxc</idTransporte><!--Optional:--><fastId /><!--Zero or more repetitions:--><tipoOperacion>1</tipoOperacion></datosGenerales><!--Optional:--><pedimentos><!--1 or more repetitions:--><pedimento><!--Optional:-
-><patenteAutorizacion>3904</patenteAutorizacion><!--Optional:--><documento>7100164</documento><!--Optional:--><numeroRemesa>2</numeroRemesa><!--Optional:--><dtaNiu>abc</dtaNiu><!--Optional:--><importeDifDolares>abc</importeDifDolares><!--Optional:--><importeEfectivoDolares>abc123</importeEfectivoDo
lares><!--Optional:--><umc>abc</umc><!--Optional:--><articulo7>0</articulo7><!--Optional:--><cove>12345</cove></pedimento></pedimentos></doda></dodas></mat:altaDoda>
---------------------------------------------------------------------------------------------
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://ww
w.w3.org/TR/1999/REC-xpath-19991116"><XPath>/dodas</XPath></Transform><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /><DigestValue>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</DigestValue
></Reference></SignedInfo><SignatureValue>PLeNmY5ryu348507jd1P8DXMAEXQWg5ProRS9SU7tPDTVGjn33u4qwtU0HW1GJVwd3NpiGvjJzOonVR7gmoV8FbZtWG0IpLL8jy7PRAppZEupAAmGlFnLR10MPHKlvnsZIsiVstGn+TBKzx/EqNxztrfNJUUH8Huc65YPlq3TEA=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>yapCI4cdFFHP+pJ8LtCH8TxWpaPm
NwhFMy2/K6HmOEbyGYD+J2F3YcMaDCUnaG22t3V90p4bjEDQvhu+QLNL7JOQFs8pEOfRWL0OP0YglwZ0UnuK9umGV4hGxlpuj9q/JT1hJMhYJgIXwjNd1vw0mDeXmrJzBQQNX0ShZd8T4AM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature>
Documento XML firmado con éxito!
另一个测试2测试2
VMH94111
kldffI
Lkk9rtreljd | JKKKK | TRTVL767 | jnkj3444 | 1234567890
170123Valcandado01V
ALCONTENDOR01890ZXC171001642ABCABC123ABC012345
---------------------------------------------------------------------------------------------
/dodas47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=PLENMY5RYU348507JD1P8DXMAEXQWGJ5PRORS9SU7TPDTVGJN33U4QWTU0HW1GJVWD3NPIGVJZZZZZZZV0IPLL8JY7PrappzeupaaMglFnll0MphKlVnsziVSTGN+TBKzx/EQNXRFJUH8UC65YPLQ3TEA=YAPCI4CFH0FHP+J8LTCH8TXWPM
NwhFMy2/K6HmOEbyGYD+J2F3YcMaDCUnaG22t3V90p4bjEDQvhu+QNL7JOQFS8PEOFRL0OP0YGLWZ0UNUNUK9UMGV4HGXLPUJ9Q/JT1HJMHYJGIXWJND1VW0MDEXMRJZBQNX0SHZD8T4AM=AQAB
Documento XML firmado conéxito!
第一个输入有一个标记值
<Usuario>TEST1TEST1</Usuario>
TEST1TEST1
第二个输入有一个标记值
<Usuario>ANOTHERTEST2TEST2</Usuario>
另一个测试2测试2
但是有同样的价值
<DigestValue>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</DigestValue>
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
您的第一个和第二个输入是相同的……感谢您的注释!除了一个标记外,两个输入都是相同的。第一个输入是TEST1TEST1,第二个输入是:另一个test2test2