xmlsec 和 openssl 中生成的摘要值不同
Digest value generated in xmlsec and openssl are different
您好,我正在学习和研究数字签名验证,我尝试使用 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=
我试图重现这个值只是为了看看我是否理解正确。如from this question。我的理解是,在规范化 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 元素并应用正确的哈希后,我得到了相同的结果。
您好,我正在学习和研究数字签名验证,我尝试使用 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=
我试图重现这个值只是为了看看我是否理解正确。如from this question。我的理解是,在规范化 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 元素并应用正确的哈希后,我得到了相同的结果。