如果我们采取以下Signature元素作为一个例子:'是SignatureMethod' 算法相对于 'DigestMethod' 算法在XML签名
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#_884D49DAD03AD60748547F8322C11AA0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyName>...</ds:KeyName>
</ds:KeyInfo>
</ds:Signature>
有一个是SignatureMethod算法(http://www.w3.org/2000/09/xmldsig#rsa-sha1)和DigestMethod算法(http://www.w3.org/2000/09/xmldsig#sha1)。
据我所知,SignatureMethod算法为'rsa-sha1'表示要签名的内容首先使用SHA1哈希(消化),然后使用RSA进行签名。
DigestMethod算法是否始终等于SignatureMethod算法中指定的摘要机制('rsa-sha1'的部分'sha1)?
我认为情况并非如此,因为指定两次相同的算法是没有用的。我推测可以有多个'Reference'可以使用不同的DigestMethod算法进行消解,并且这些摘要的集合将再次使用SignatureMethod算法指定的摘要机制进行散列。
我是试着通过引用'XML签名语法和处理'规范来理解这一点。如果有人能够确认我是否理解正确,或者解释这两种算法的用途,我将非常感激。谢谢。