输入流与字符流的哈希值

时间:2014-07-23 16:42:16

标签: java xml hibernate hash

我们正在开发基于Java的应用程序并使用Hibernate for DAO。我在数据库中有一个XML数据存储作为Clob。使用Hibernate Clob对象并将其解析为String。然后我HASH(SHA-256)它。

Clob对象有2个方法。

  1. getAsciiStream()返回InputSteam
  2. getCharacterStream() 返回Reader
  3. 解析器将InputStreamReader解析为完全相同的String。然而,从它们中生成的哈希是不同的。为什么呢?

    上下文:我们目前正在使用getAsciiStream(),它限制了许多特殊字符。所以我们必须改变它getCharacterStream()。但是,我们的应用程序(由于业务原因进行哈希比较)和客户将受到更改的影响。

    Example XML:
    <application>
        <header>
            <subtitle>WHAT EVER</subtitle>
            <page_header>WHAT EVER</page_header>
        </header>
        <form>
            <application_form_name>WHAT EVER</application_form_name>
            <section>
                <section_name>WHAT EVER</section_name>
                <question>
                    <question_text>How is this applicant to something?</question_text>
                    <answer>WHAT EVER</answer>
                </question>
                <question>
                    <question_text>What is something?</question_text>
                    <answer>WHAT EVER</answer>
                </question>
                <question>
                    <question_text>Type of Customer</question_text>
                    <answer>Organization</answer>
                </question>
                <question>
                    <question_text>Full legal name of the applicant:</question_text>
                    <answer/>
                </question>
                <question>
                    <question_text>Legal Name</question_text>
                    <answer>WHAT EVER</answer>
                </question>
                <question>
                    <question_text>WHAT EVER</question_text>
                    <answer/>
                </question>
                <question>
                    <question_text>WHAT EVER</question_text>
                    <answer/>
                </question>
                <question>
                    <question_text>WHAT EVER</question_text>
                    <answer/>
                </question>
                <question>
                    <question_text>WHAT EVER</question_text>
                    <answer/>
                </question>
            </section>
        </form>
    </application>
    

1 个答案:

答案 0 :(得分:0)

不推荐使用AFAIK getAsciiStream

另外,请提供两个(getAsciiStream / getCharacterStream)版本的哈希计算代码 - 整个部分 - 您如何从数据库中读取数据以及如何将数据提供给MessageDigest。它比您的XML示例提供更多信息。

顺便说一下。由于XML具有非重要的空格,其中特殊(非重要的空格忽略)方式如何计算XML数据上的消息摘要:

顺便说一下。你还是做错了。您只需使用实体就可以使用普通的latin1编码在XML中存储任何字符。因此,您可以按原样保留XML读取代码,但更改XML-to-String代码(为XmlWriter指定latin1编码)。