使用流时MD5校验和的差异

时间:2014-11-12 10:19:01

标签: md5 apache-commons

我尝试为文件生成MD5校验和,但不知何故我使用它的方式存在问题:

@Test
public void streamTestApacheCommonsCodec14() {
    String hash = null;
    try {

        InputStream is = new FileInputStream("C:\\Work\\dataset\\main\\main.xml");
        BufferedInputStream entryBIS = new BufferedInputStream(is,
            Constants.BUFFER_MEDIUM);
        hash = DigestUtils.md5Hex(entryBIS);

        assertThat(hash,is(equalTo("9be6e92c6a8b684a35420cb087704a4c")));
    } catch (IOException e) {
        e.printStackTrace();
        fail();
    }

}

传递 如果我在md5Hex参数中使用fileStream,我仍然会得到正确的校验和

 @Test
    public void fastMd5Twmacinta271() {
        String hash = null;
        try {
            hash = MD5.asHex(MD5.getHash(new File("C:\\Work\\dataset\\main\\main.xml")));
            assertThat(hash,is(equalTo("9be6e92c6a8b684a35420cb087704a4c")));
        } catch (IOException e) {
            e.printStackTrace();
            fail();
        }

    }

传递

 @Test
    public void fastMd5TwmacintaStream271() {
        String hash = null;
        try {

            InputStream fileStream = new FileInputStream("C:\\Work\\dataset\\main\\main.xml");
            BufferedInputStream entryBIS = new BufferedInputStream(fileStream,
                Constants.BUFFER_LARGE);

            com.twmacinta.util.MD5 md5Reader =  new com.twmacinta.util.MD5(entryBIS);
            hash = md5Reader.asHex();
            assertThat(hash,is(equalTo("9be6e92c6a8b684a35420cb087704a4c")));
        } catch (IOException e) {
            e.printStackTrace();
            fail();
        }

失败 如果我在构造函数中使用fileStream,我仍然会得到错误的,但是不同的校验和

有人知道问题在哪里吗?这是一个twmacinta bug吗?

佐尔坦

1 个答案:

答案 0 :(得分:0)

问题是由于未将字符编码设置为UTF8

引起的