识别二进制文件最有效的方法是什么?我想从二进制文件中提取某种签名,并用它与其他文件进行比较。
暴力方法是使用整个文件作为签名,这将花费太长的时间和太多的内存。我正在寻找一种更聪明的方法来解决这个问题,并且我愿意为了性能而牺牲一点准确性(但不是太多,嗯)。
(虽然首选 Java 代码示例,但鼓励与语言无关的答案)
Edit:扫描整个文件来创建哈希的缺点是文件越大,花费的时间越长。由于哈希无论如何都不是唯一的,我想知道是否有更有效的方法(即:来自均匀分布的字节采样的哈希)。
我发现对此类事情有效的一种方法是计算两个 SHA-1 哈希值。一个用于文件中的第一个块(我任意选择 512 字节作为块大小),一个用于整个文件。然后我存储了两个哈希值以及文件大小。当我需要识别一个文件时,我会首先比较文件长度。如果长度匹配,那么我将比较第一个块的哈希值,如果匹配,我将比较整个文件的哈希值。前两次测试很快就清除了许多不匹配的文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)