识别文件的字节数最少

Cor*_*ott 2 algorithm hash search heuristics

我目前正在开展一个小方案项目,结果证明这是一个挑战.这是设置:我有一个相当古老的处理器,用于各种产品.各种应用程序有大约500种不同的固件版本.它们有时在几个字节~1k之间有所不同,其他时间只有5%.现在,我想通过为它创建一个唯一的标识符来识别每个版本.我已经将firmewares二进制文件作为文件工作和训练.

目标是,当任何设备到来时,我想尽可能少地读出已安装固件的字节数,因为9600波特的连接速度相当慢.即使固件总共只有大约64k,但完全读取它需要相当长的时间(由于协议开销,时钟速度等等,约5分钟)

我正在考虑一些逻辑,它将解析存储的固件文件,并确定可以使用哪些字节来唯一地识别它.每当一个设备到来时,它会读取每个指纹字节,而不是另一个,就像旧的T9文本预测一样,缩小候选者的范围,直到它找到正确的固件.为此,我需要构建一个包含最优化的指纹字节集的数据库.但是如何训练呢?如何找到超过500个文件的最重要字节?

到目前为止,我已经尝试统计分析文件并找到文件之间差异最大的前50字节.问题是,即使占用50个字节,我也会得到多个创建相同哈希的版本.

任何可能解决问题的建议或算法都将非常受欢迎!如果你有一个与此完全不同的approch的想法,我很乐意听到它!

Yve*_*ust 5

识别值可能不同的所有字节位置.然后找到"最有效的分离器",即探测该值将在最小子集(在minmax意义上)中分割当前集合的位置,或者更多的子集.

然后递归地重复每个子集的整个过程.这将产生一个决策树,给你(希望很短)的字节序列进行测试.

这是一种启发式方法,可能不是最优的,我希望如此

  • 计算过程不是太长(虽然它将为所有人运行一次),
  • 它离最佳状态并不太远.

假设每个分割均衡,但每次在两个子集中产生,则测试序列不会超过10个字节.

  • 我知道你去哪里......我想的越多,approch就越有希望了.我刚用哈希来确保路径的唯一性.但你是正确的,哈希他们将不会使用所需的最小数据集.与我的approch最大的不同之处在于细分,子组在其自身中进行了优化.我缺乏这个,因此我看到了我遇到的问题.我会放手一搏...... (2认同)