MessageDigest 为同一文件提供两个不同的哈希值

MessageDigest gives two differents hash for a same file

我正在使用 MessageDigest 使用 SHA 256 对文件进行哈希处理,如下所示:

    byte[] hash = new byte[32];
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    try (InputStream input = Files.newInputStream( Paths.get(file.getPath()) )) {
        byte[] buf = new byte[8192];
        int len;
        while ( (len=input.read(buf)) > 0 ) {
            digest.update(buf, 0, len);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    hash = digest.digest();

"simplified" 的想法是:我对一个文件进行哈希处理,只取前两个字节,将它发送到两个服务器;服务器查看他的 DB ob 他已经有了这个 "shorthash" (我的意思是,两个字节)。如果是,则不允许客户端发送该文件,该文件将以简码形式保存在数据库中。

问题是:如果我给同一个文件两次,它不会给我相同的散列。我不知道为什么。

感谢罗伯特,这似乎只是一个打印问题。 我以这种方式打印它并得到两个以 B@ 开头的奇怪字符串:

System.out.println(hash);

通过这种方式,我得到了两个完全相同的 int 数组:

System.out.println(Arrays.toString(hash))

现在我只需要找出为什么我的数据库看不到它们是相同的。由于这可能是由于 SQL 声明,因此不再是主题。