首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Xades签名的Xml文档导入另一个Xml文档?

如何将Xades签名的Xml文档导入另一个Xml文档?
EN

Stack Overflow用户
提问于 2014-05-31 08:46:03
回答 1查看 591关注 0票数 0

我正在尝试将一个签名的xml文档导入另一个xml文档。当我导入文档并在没有更改的情况下导出它时,我就不能再验证它了。

甚至下面的代码也破坏了验证。

代码语言:javascript
复制
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();

if (ofd.FileName != "")
{
   XmlDocument XmlDocument = new XmlDocument();
   XmlDocument.Load(ofd.FileName);

   FolderBrowserDialog fbd = new FolderBrowserDialog();
   fbd.ShowDialog();

   if (fbd.SelectedPath != "")
   {
      XmlDocument.Save(fbd.SelectedPath + @"\Doc.xml");
   }
}

如何在不破坏签名验证的情况下导入/导出xml文档?

我的Xml文件是:

  • 信封:Dl.merharmansa.com/信封.
  • 发票:Dl.merharmansa.com/invoice.xml

invoice.xml是签名的文档。我想将invoice.xml导入envelope.xml。envelope.xml的元素将由invoice.xml导入,如图所示。

EN

回答 1

Stack Overflow用户

发布于 2014-05-31 09:06:57

给定以下签名的XML:

代码语言:javascript
复制
<?xml version="1.0"?>
<MySignedXMLRoot xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <MySignedXMLNode>TextToBeSigned</MySignedXMLNode>
  <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>3tAjL2X1SEMhxQ1Hp9X4HBUtsgQ=</DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue>UYyELdlqq1InZSwSKozhIuATU52gdVFw0AqnZxOB0xQR6CS2hbW5tZIXc6fMPSYstyfMVULO1ZioRkHvyIY7LqeR/i4cYZvA1VpzTnx+0gZEcPFEuMORNgJ0v/W7NHi5xJb6uxkdZBcSMleFWitTHO+tPh8tha0cNdp4XO8Xx4Y=</SignatureValue>
  </Signature>
</MySignedXMLRoot>

如果希望将其包含在以下XML文档中:

代码语言:javascript
复制
<MyXML>
    <SomeData>Random Data</SomeData>
    <Container/>
</MyXML>

您必须正确地设置签名的引用属性:

代码语言:javascript
复制
<MyXML>
    <SomeData>Random Data</SomeData>
    <Container>
        <MySignedXMLRoot id="ElementToSign" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <MySignedXMLNode>TextToBeSigned</MySignedXMLNode>
            <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="#ElementToSign">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                        <DigestValue>3tAjL2X1SEMhxQ1Hp9X4HBUtsgQ=</DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue>UYyELdlqq1InZSwSKozhIuATU52gdVFw0AqnZxOB0xQR6CS2hbW5tZIXc6fMPSYstyfMVULO1ZioRkHvyIY7LqeR/i4cYZvA1VpzTnx+0gZEcPFEuMORNgJ0v/W7NHi5xJb6uxkdZBcSMleFWitTHO+tPh8tha0cNdp4XO8Xx4Y=</SignatureValue>
            </Signature>
        </MySignedXMLRoot>
    </Container>
</MyXML>

您可以使用Reference.Uri设置它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23968147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档