当前位置: 首页 > 知识库问答 >
问题:

用python生成xml签名的问题

能正青
2023-03-14
<?xml version='1.0' encoding='ISO-8859-1'?>
  <Ficha version="1.0">
    <Documento ID="F1">
      <Animal>
       <tipo>33</Tipo>
       <raza>1</raza>
       <Fch>2021-02-22</Fch>
     </Animal>
  </Documento>
</Ficha>
from lxml import etree
import xml.etree.ElementTree as ET
from signxml import XMLSigner, XMLVerifier
import signxml
import sys

file='example.xml'
uri='F1'
ET.register_namespace('', "http://www.w3.org/2000/09/xmldsig#");

parser = etree.XMLParser(encoding='ISO-8859-1', resolve_entities=False)
el = ET.parse(file,parser)
root = el.getroot()
cert = open("cert.pem").read()
key = open("key.pem").read()

signed_root = XMLSigner(method=signxml.methods.enveloped,
                        signature_algorithm='rsa-sha1',
                        c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315',
                        digest_algorithm="sha1").sign(root, key=key,cert=cert,reference_uri=uri,always_add_key_value=True)

tree = ET.ElementTree(signed_root)
 <?xml version='1.0' encoding='ISO-8859-1'?>
    <Ficha xmlns="http://www.w3.org/2000/09/xmldsig#" version="1.0">
        <Documento ID="F1">
                <Animal>
                    <tipo>33</Tipo>
                    <raza>1</raza>
                    <Fch>2021-02-22</Fch>
                </Animal>
    </Documento>
    <Signature>
         .....
         .....
         .....
    </Signature>
    </Ficha>

我想要的是:

 <?xml version='1.0' encoding='ISO-8859-1'?>
        <Ficha version="1.0">
            <Documento ID="F1">
                    <Animal>
                        <tipo>33</Tipo>
                        <raza>1</raza>
                        <Fch>2021-02-22</Fch>
                    </Animal>
        </Documento>
        <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
             .....
             .....
             .....
        </Signature>
        </Ficha>

我做错了什么?我需要将属性xmlns=“http://www.w3.org/2000/09/xmldsig#”从ficha标记更改为签名标记

共有1个答案

平航
2023-03-14

Ficha是根元素,我认为您使用。sign(root,......)特别是在根元素上调用sign

我会给签名元素一个变量名,然后替换

.符号(根...

 类似资料:
  • 我正在尝试构建我的第一个签名APK以供发布,但出现了一些错误。看起来效果很好,但现在我就是无法生成APK。我做了研究,但什么也没找到。 Gradle版本:4.8,Android插件版本3.1.4,这是我的应用程序Gradle屏幕截图:link 这来自assembleDebug: 我曾经有过布局和不赞成使用的功能的其他问题,但我解决了它。其中一个就这样消失了,但我什么也没做:-) 我已经尝试过的事情

  • 本文向大家介绍Java使用DSA密钥对生成XML签名的方法,包括了Java使用DSA密钥对生成XML签名的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java使用DSA密钥对生成XML签名的方法。分享给大家供大家参考。具体实现方法如下: MainClass.java代码如下: 希望本文所述对大家的java程序设计有所帮助。

  • 我有代码使用为ECDSA签名生成串联(r-s)签名和JWK格式的密钥: 似乎有效。我也有使用来实现相同目标的代码: 这两者都返回128字节的缓冲区;并且它们可以交叉验证(例如,我可以用< code>SubtleCrypto验证< code > JSR sign 签名,反之亦然)。然而,当我在Node.js 模块中使用< code>Sign类时,我似乎得到了完全不同的东西。 在这里,我得到了一个可变

  • 如果你想把自己的资源发放给第三方用户访问,但是又不想开放Bucket的读权限,可以通过生成预签名URL的形式提供给用户一个临时的访问URL。在生成URL时,你可以指定URL过期的时间,从而限制用户长时间访问。 生成一个预签名的URL 如下代码: String bucketName = "your-bucket-name"; String key = "your-object-key"; // 设

  • 如果你想把自己的资源发放给第三方用户访问,但是又不想开放Bucket的读权限,可以通过生成预签名URL的形式提供给用户一个临时的访问URL。在生成URL时,你可以指定URL过期的时间,从而限制用户长时间访问。 生成预签名URL来获取Object <?php $url = $client->generatePresignedUrl(array( 'Bucket' => 'your-buck