什么方法可以创建一个16字节的校验和

时间:2018-09-29 00:29:32

标签: c++ c checksum

我有一个客户的损坏的应用程序正在尝试修复,但是原始代码已丢失,我正在尝试对其进行重新设计。它涉及将140个数据块(每个块768字节)下载到设备。数据中有一个“校验和”,由16个字节的数据组成,大概覆盖了所有140个块或可能覆盖了一些小子集(无法得知)。

如果我仅更改数据中的1位,则“校验和”的整个16个字节都会更改。我要寻找的是有关如何计算“校验和”的想法。

示例:

在块24中,偏移量为0x116,我将两个字节从0xe001更改为0xe101,并且“校验和”数据从以下位置更改:

53 20 5a 20 3e f5 38 72 eb d7 f4 3c d9 0a 3f c5

对此:

7f fe ad 1f cc c3 1e 3c 22 0a bf 6a 6d 03 ad 97

如果有一些线索,我可以尝试一下,他们可能如何计算此“校验和”。

正在寻找使我入门的任何想法。

1 个答案:

答案 0 :(得分:0)

部分答案:

  

大概覆盖了所有140个块或一个小子集(无法   知道)

     

如果我只更改数据中的1位,则整个16个字节   “校验和”发生了变化。

遍历数据的每个位,依次修改每个位,并查看校验和是否更改。然后,您可以找出要散列的子集(如果有)。

一旦知道了这一点,便可以提出已知的输入/输出对。您可以将已知输入插入工具,该工具将使用众所周知的哈希算法(例如,http://www.toolsvoid.com/multi-hash-generator-这是我从Google获得的第一笔收入,不一定是最全面的)来生成输出。

编辑:根据对问题的评论,如果有盐,这将不起作用。但是至少它将很快排除最简单的情况。