2011-12-05 51 views
1

目前,我有一个服务器,2个客户端可以连接。这两个客户端都在硬盘上有一个文本文件,一旦启动,程序就会读取它。这个文本文件应该包含两个客户机上的相同的数据(它只是纯文本)(应该由服务器验证),否则服务器可能无法为客户机提供服务。Java验证文件

我想知道如何正确地做到这一点。我该怎么办?计算一个哈希码,或者使用MD5/SHA1/SHA2这样的东西?我应该先读取文件并计算创建的对象上的哈希码或直接在文件上计算MD5?

感谢

+2

也许一个[CRC32检查](http://stackoverflow.com/questions/7776069/confirming-file-content-against-hash)?文件内容有多大?如果很小,您可以比较它们的字节。顺便说一句 - 这为最终用户提供了哪些应用程序功能? –

回答

0

要成为真的,真的很确定,您必须将两个文本文件的内容传输到服务器并将它们作为字符串进行比较。

出于所有实际目的,您可以计算哈希代码并在服务器上比较该值。看看Apache公共类中的FileUtil类。它定义了一个checksumCRC32(File file)方法,您可以使用该方法计算文件的校验和。如果两个文件的校验和相等,则内容可以假定为相等。它们不同的可能性是1/2^32。

0

你可以很容易地计算使用Apache的共享DigestUtils文件的哈希值。它有很好的计算哈希的方法,不管是MD5还是SHA1。然后,比较每个客户端的文件散列值。

此外,你应该知道,确切的散列并不能保证100%的文件是相同的。这是非常罕见的情况,在文件不相同的情况下,因为它们的哈希值相等。但是,根据这种确定是否在您的应用中至关重要,您可能必须逐字比较散列值相等的文件,以确认它们具有确切的数据。