【问题标题】:How to calculate checksum of XML header and body using sha-256 in java如何在 java 中使用 sha-256 计算 XML 标头和正文的校验和
【发布时间】:2021-03-07 21:09:42
【问题描述】:

我需要使用 sha-256 计算以下 XML 的标头和有效负载的校验和,并将其写入到尾部节点(校验和元素)的相同 XML 中。 我已经在下面的链接中复制了源代码。

How to convert CSV to XML in Java using JAXB

我在互联网上搜索了它,但找不到我正在寻找的解决方案。他们中的大多数正在从物理位置读取 xml 文件并进行转换。 但是我不会将 XML 写入文件(仅供参考,不用于任何其他目的)。我需要计算 header 和 payload 的校验和,然后将其写入到预告片部分并发送到 Solace 主题。

如何使用 sha-256 计算 XML 的 header 和 body 的校验和数据?

<?xml version='1.0' encoding='UTF-8'?>
<canonMessage xmlns="http://www.test.com/canon/v1">
    <header>
        <metadata>
            <domain>
                <name>party</name>
                <schemaVersion>1.0</schemaVersion>
                <subdomain>
                    <name>employee</name>
                </subdomain>
            </domain>
            <identifier>
                <id idScheme="HRSystem/lanId">SHawking</id>
            </identifier>
            <source>HRSystem</source>
            <messageId>84ec00d0-2a33-11eb-ae59-0050569a5c1d</messageId>
        </metadata>
    </header>
    <payload>
        <employee xmlns="http://www.test.com/party/employee/v1">
            <employeeId>79498</employeeId>
            <lanId>SHawking</lanId>
            <name>
                <lastName>Hawking</lastName>
                <firstName>Steve</firstName>
            </name>
            <businessTitle>Client Manager</businessTitle>
            <status>A</status>
            <groupName>Management</groupName>
            <departmentName>Legal</departmentName>
            <costCentre>RUSYDFGLEG</costCentre>
            <officeLocation>Texas</officeLocation>
            <region>US</region>
        </employee>
    </payload>
    <auditRecords>
        <sourceAuditRecord>
            <system>HRSystem</system>
            <timestamp>
                <created>2020-11-19T17:50:32.84+11:00</created>
                <sent>2020-11-19T17:50:32.84+11:00</sent>
            </timestamp>
        </sourceAuditRecord>
    </auditRecords>
    <trailer>
        <checksum type="sha-256">f60875e4905b62ed188ca61aee75fcfe354ae57fba4cabc8aba093d86a001569</checksum>
    </trailer>
</canonMessage>

【问题讨论】:

    标签: java jaxb sha256 sha


    【解决方案1】:

    XML 数字签名

    Java XML 数字签名 API 是用于生成和验证 XML Signatures 的标准 Java API。

    XML Digital Signature API Overview and Tutorial

    API 由JSR 105: XML Digital Signature APIs 定义。

    XMLSignature 接口让您可以签名和验证签名。

    【讨论】:

    • 此 XML 不是来自文件。我使用 JAXB 生成 XML 并向其中添加校验和。以上是来自文件的 XML。我编组 java 对象并将其作为字符串获取。我需要做的是使用 DigestUtils.sha256Hex() 计算校验和数据。我尝试将标头和正文 java 对象作为字符串传递,例如“DigestUtils.sha256Hex(xml.getHeaderdata().toString()+xml.getBody().toString())”。但是我不确定这是否是正确的做法
    • 您不能散列整个 XML,因为 XML 也包含散列。签名仅使用某些元素进行计算。对“.toString()”进行散列并不是一个好主意。 XML Crypto 使用 XMLSignatureFactory 工作,唯一记录在案的工厂是 DOM 。对于签名,您需要编组 JAXB 并解析输出以获取 dom Document 和 signit 。为了验证类似的事情。为 JAXB 提供 XMLSignatureFactory 会很好。
    • 明白,但是在我们的例子中,现有系统遵循将 XML 转换为字符串并计算标头和有效负载之间的校验和的相同模式。我已经按照相同的方法进行了计算,并且被接受了。感谢您的宝贵意见
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多