如何解决签名和验证之间封装xml签名时原始数据的差异?

How to solve the diffenece of originaldata when enveloping xml signature between sign and verify?

提问人:user22897558 提问时间:11/11/2023 最后编辑:Progmanuser22897558 更新时间:11/12/2023 访问量:23

问:

            DigestMethod sm3DigMethod = fac.newDigestMethod(DOMDigestMethod.SM3, null);


            
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            docBuilderFactory.setNamespaceAware(true);
            Document signatureDoc = docBuilderFactory.newDocumentBuilder().parse(new ByteArrayInputStream(data));
            XMLStructure content = new DOMStructure(signatureDoc.getDocumentElement());
            XMLObject obj = fac.newXMLObject(Collections.singletonList(content), "object", (String) null, (String) null);

            
            CanonicalizationMethod c14nWithCommentMethod =
                    fac.newCanonicalizationMethod("http://127.0.0.1/TR/2001/REC-xml-c14n-20010315#WithComments", (C14NMethodParameterSpec) null);
            
            SignatureMethod sm2_sm3SigMethod = fac.newSignatureMethod(DOMSignatureMethod.SM2_SM3, null);
            
            SignedInfo signedInfo = fac.newSignedInfo(c14nWithCommentMethod, sm2_sm3SigMethod, Collections.singletonList(refToRootDoc));

            KeyInfoFactory keyInfoFac = fac.getKeyInfoFactory();
            KeyValue keyValue = keyInfoFac.newKeyValue(publicKey);
            KeyInfo keyInfo = keyInfoFac.newKeyInfo(Collections.singletonList(keyValue));
            
            XMLSignature signature = fac.newXMLSignature(signedInfo, keyInfo, Collections.singletonList(obj), null, null);


            DOMSignContext dsc = new DOMSignContext(privateKey, signatureDoc);

            
            signature.sign(dsc);

签名时:原始数据在此处输入图像描述

验证时:原始数据在此处输入图像描述

我觉得签名部分的代码有问题,希望能用实际的原文签名。我需要做什么

Java XML

评论

0赞 jdweng 11/11/2023
为什么你用对象而不是书?XMLObject obj = fac.newXMLObject(Collections.singletonList(content), “object”, (String) null, (String) null);
0赞 user22897558 11/13/2023
@jdweng 这应该包括或不替换。这似乎是封装xml签名的语法。
0赞 jdweng 11/13/2023
请参阅以下内容:oracle.com/technical-resources/articles/java/... 或此 stackoverflow.com/questions/12528667/xml-digital-signature-java

答: 暂无答案