我也有类似如下结构的XML文档
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<footer></footer>
</envelop>
我想进行数字签名的报头和消息元素和所述签名添加到所述页脚元素。
我怎样才能签署元素,然后之后(使用.NET C#)验证签名?
我也有类似如下结构的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>
您可以通过使用封装签名变换(第一种情况)或通过签订signedEnvelope元素(第二种情况)处理。
读这http://msdn.microsoft.com/en-us/library/ms229745.aspx
有一个微软的合作伙伴可能是这个相当不错。 它们允许你添加数字签名的XML(以及所有其他平台)。 我建议检查他们的产品,这就是所谓的余弦。
http://social.msdn.microsoft.com/Search/en-US/?query=digital%20signature%20xml&ac=3
为什么不遵循XML签名W3 recomendation http://www.w3.org/2000/09/xmldsig#它的基本结构:
<Signature>
<SignedInfo>
<SignatureMethod />
<CanonicalizationMethod />
<Reference>
<Transforms>
<DigestMethod>
<DigestValue>
</Reference>
<Reference /> etc.
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
如果你想更先进的功能,了解XAdES的 - 我认为这是在C#avalible。
我看到这个帖子是旧的,但也许有人现在有同样的需求。 你需要什么莫名其妙就像XMLDSIG封装签名。 所不同的是,在XMLDSIG你必须包括在签名节点的签名数据。
如果要做到这一点,你必须实现它自己。
我参与了一个项目,建立一种库提供的.NET Framework的XAdES支持。
我们刚刚发布了1.0版本,它提供了的XAdES-BES早期支持。
你可以找到它的XAdES .NET项目
我希望的源代码可以帮助你以某种方式。
问候。