我正在使用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中。
问题是:如果我给同一个文件两次,它将不会给我相同的哈希值。而且我不知道为什么。
答案 0 :(得分:0)
多亏了罗伯特,看来这只是一个印刷问题。 我以这种方式进行打印,并得到了两个以B @开头的奇怪字符串:
System.out.println(hash);
通过这种方式,我得到了两个完全相同的int数组:
System.out.println(Arrays.toString(hash))
现在,我只需要找出为什么我的数据库看不到它们相同的原因。由于这可能是由于SQL语句引起的,因此不再是主题。