xml - 对 XML 文档的各个部分进行数字签名

标签 xml cryptography digital-signature xml-signature signedxml

我有一个 XML 文档,其结构类似于以下内容

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

我想对页眉和消息元素进行数字签名,并将签名添加到页脚元素。

我如何签署元素然后验证签名(使用 .net c#)?

最佳答案

您应该能够将 XPath 转换添加到签名中。它应该看起来像这样:

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

我不精通 XPath,但应该很容易制定排除页脚元素的 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>

您可以通过使用 Enveloped Signature Transform(第一种情况)或通过签署 signedEnvelope 元素(第二种情况)来处理它。

关于xml - 对 XML 文档的各个部分进行数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031856/

相关文章:

java - 为什么 SSL 握手会给出 'Could not generate DH keypair' 异常?

c# - 如何从 .NET 读取 PEM RSA 私钥

cryptography - 使用 OpenSSL 的 ECDSA 签名,没有 ASN1 编码哈希

.net - "referenced assembly"如何验证 "caller assembly"的签名/真实性?

python - Beautiful Soup find_all() 返回奇数标签而不是结果

ruby-on-rails - 为返回 XML 的 Controller 操作编写规范 -- Ruby on Rails

python - 在 python 中使用 elementtree 提取 XML 节点文本时出错

c++ - 如何使用 XOR 加密字符串而不包含奇怪的字符?

java - 解析巨大的XML文件形成DOM树

c# - 如何在 C# 中使用 SHA256 和 ECDSA 算法创建数字签名