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

时间:2018-07-30 11:56:00

标签: java sha256 message-digest

我正在使用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();

“简化”的想法是:我对一个文件进行哈希处理,仅获取前两个字节,然后将其发送给两个服务器;服务器在他的数据库对象中查找,他已经有了这个“ shorthash”(我的意思是两个字节)。如果是,则不允许客户端发送文件,该文件将与shorthash一起保存在DB中。

问题是:如果我给同一个文件两次,它将不会给我相同的哈希值。而且我不知道为什么。

1 个答案:

答案 0 :(得分:0)

多亏了罗伯特,看来这只是一个印刷问题。 我以这种方式进行打印,并得到了两个以B @开头的奇怪字符串:

System.out.println(hash);

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

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

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