xmlsec和openssl生成的摘要值不同

矛头

嗨,我正在学习和研究数字签名验证,我尝试使用xmlsec图书馆。使用xmlsec和示例中的代码:

parser = etree.XMLParser(remove_blank_text=True)
template = etree.parse('test.xml', parser).getroot()

signature_node = xmlsec.tree.find_node(template, xmlsec.constants.NodeSignature)
ctx = xmlsec.SignatureContext()
key = xmlsec.Key.from_file('keys/private_key.pem', xmlsec.constants.KeyDataFormatPem)
ctx.key = key
ctx.sign(signature_node)
formated = etree.tostring(template)

with open('xmlsec_formatted.xml', 'wb') as the_file:
    the_file.write(formated)

它生成了一个新文件,摘要值为:izbIdQ4tSAg6VKGpr1zd6kU9QpVQi/Bcwxjxu/k2oKk=

我试图重现这个值只是为了看看我是否正确理解它。由于此问题我的理解是在规范化 xml 之后(我使用了下面的代码)

from lxml import etree

parser = etree.XMLParser(remove_blank_text=True)

xmlTree = etree.parse('test.xml', parser)
root = xmlTree.getroot()
formated = etree.tostring(root, method='c14n')
with open('canon.xml', 'wb') as the_file:
        the_file.write(formated)

我只需要对它进行散列并将其编码为 base64。从另一个问题,我尝试了下面的OpenSSL命令:openssl dgst -binary -sha256 canon.xml | openssl enc -base64但是,它产生了这个摘要值:YAzI0t93fuMTBIGkLeYC5VVPyaM0FziBLP5fF6qojbw=我也尝试使用初始 xml 文件,但它仍然产生不同的值。我的理解正确吗?我如何验证摘要值以用于学习目的。

矛头

阅读后我做错了:RFC3274

我需要解码 obj 元素而不是实际的 xml 文件本身。解码 obj 元素并应用正确的哈希后,我得到了相同的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章