散列文件以识别它们的替代方法?
Alternative for hashing Files to recognize them?
我正在寻找一种根据文件内容识别文件的方法。所以我需要一个独立于文件位置、名称、属性等的方法。
通常我会使用像 SHA-1 或 MD5 这样的散列函数。问题是我要识别的文件的大小。这些文件通常在 5 - 15 GB 之间。
我使用 SHA-1 哈希的方法不是一个好的解决方案。散列这么大的文件需要几分钟...我需要更快的东西,它可以在几秒钟内识别之前扫描的文件。
对于这样的需求,除了哈希文件还有其他方法吗?
我当前的 Java 代码与 Mac 上的 openssl sha1 <path>
相当:
MessageDigest md = MessageDigest.getInstance("SHA1");
FileInputStream fis = new FileInputStream(f.getPath());
byte[] dataBytes = new byte[1024];
int nread = 0;
while ((nread = fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
fis.close();
byte[] mdbytes = md.digest();
//convert the byte to hex format
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
但实际上我正在寻找的不是这种哈希算法。你有想法吗? :-)
BR
m4xy
根据您处理的文件类型,仅使用文件的一部分进行哈希处理可能就足够了。例如。如果这是压缩图像数据,那么如果您只对前几千字节(可能还有最后几千字节)进行哈希处理,您将获得文件的唯一不同哈希值的可能性非常高。
这可能不适用于始终以相同方式开始的未压缩数据库转储。
作为第一个提前通过,您可以简单地比较文件大小。
对文件进行哈希处理后,您可以将哈希与文件的 ctime 一起存储。只要 ctime 没有改变,就不需要重新散列。 (您可以改用 mtime,但您需要依赖修改文件的程序,而不是手动将 mtime 设置为原来的样子。)
我正在寻找一种根据文件内容识别文件的方法。所以我需要一个独立于文件位置、名称、属性等的方法。
通常我会使用像 SHA-1 或 MD5 这样的散列函数。问题是我要识别的文件的大小。这些文件通常在 5 - 15 GB 之间。
我使用 SHA-1 哈希的方法不是一个好的解决方案。散列这么大的文件需要几分钟...我需要更快的东西,它可以在几秒钟内识别之前扫描的文件。
对于这样的需求,除了哈希文件还有其他方法吗?
我当前的 Java 代码与 Mac 上的 openssl sha1 <path>
相当:
MessageDigest md = MessageDigest.getInstance("SHA1");
FileInputStream fis = new FileInputStream(f.getPath());
byte[] dataBytes = new byte[1024];
int nread = 0;
while ((nread = fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
fis.close();
byte[] mdbytes = md.digest();
//convert the byte to hex format
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
但实际上我正在寻找的不是这种哈希算法。你有想法吗? :-)
BR m4xy
根据您处理的文件类型,仅使用文件的一部分进行哈希处理可能就足够了。例如。如果这是压缩图像数据,那么如果您只对前几千字节(可能还有最后几千字节)进行哈希处理,您将获得文件的唯一不同哈希值的可能性非常高。 这可能不适用于始终以相同方式开始的未压缩数据库转储。
作为第一个提前通过,您可以简单地比较文件大小。
对文件进行哈希处理后,您可以将哈希与文件的 ctime 一起存储。只要 ctime 没有改变,就不需要重新散列。 (您可以改用 mtime,但您需要依赖修改文件的程序,而不是手动将 mtime 设置为原来的样子。)