hpi*_*que 4 language-agnostic algorithm performance file identifier
识别二进制文件的最有效方法是什么?我想从二进制文件中提取某种签名并使用它来与其他文件进行比较.
蛮力方法是将整个文件用作签名,这将花费太长时间和太多内存.我正在寻找一种更聪明的方法解决这个问题,我愿意为性能牺牲一点准确性(但不要太多,不要太多).
(虽然首选Java代码示例,但鼓励使用与语言无关的答案)
编辑:扫描整个文件以创建哈希的缺点是文件越大,所需的时间越长.由于哈希无论如何都不是唯一的,我想知道是否有更有效的方法(即:来自均匀分布的字节采样的哈希).
Fer*_*cio 11
我发现这种方法有效的方法是计算两个SHA-1哈希值.一个用于文件中的第一个块(我任意选择512个字节作为块大小),一个用于整个文件.然后我将两个哈希值与文件大小一起存储.当我需要识别文件时,我首先要比较文件长度.如果长度匹配,那么我将比较第一个块的散列,如果匹配,我比较整个文件的散列.前两个测试很快就淘汰了很多不匹配的文件.