我有一个xml文档,其结构类似于

<envelop>
    <header>blaa</header>
    <message>blaa blaa</message>
    <footer></footer>
</envelop>

我想对header和message元素进行数字签名,并将签名添加到footer元素。
如何对元素签名,然后稍后验证签名(使用.NET C)呢?

最佳答案

您应该能够向签名添加xpath转换。应该是这样的:

       <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
         <XPath xmlns:dsig="&dsig;">
         ...
         </XPath>
       </Transform>

我不精通xpath,但是应该很容易构造一个不包括footer元素的xpath表达式。(但请注意,xpath是xml-dsig的可选部分,因此并非所有实现都支持它)。
或者,如果您可以将您的文档重组为
<envelop>
  <header>blaa</header>
  <message>blaa blaa</message>
  <Signature></Signature>
</envelop>


<envelop>
  <signedEnvelope>
    <header>blaa</header>
    <message>blaa blaa</message>
  </signedEnvelope>
  <Signature></Signature>
</envelop>

您可以通过使用信封签名转换(第一种情况)或签名signedenvelope元素(第二种情况)来处理它。

10-05 18:46