如果我有一行数据,例如:
1, 2, 3
我可以创建一个校验和值,它是所有列的总和,1 + 2 + 3 = 6。我们可以将此值与第 4 列中的行一起存储:
1, 2, 3, 6
然后我可以编写一个程序来检查列中的任何值是否意外更改,如果列的总和与校验和值不匹配。
现在,我想更进一步。假设我有一个值表,任何人都可以读/写访问,其中最后一列数据是前面所述的前列的总和。
1, 2, 3, 6
假设有人想偷偷摸摸并更改第三列中的值
1, 2, 9, 6
校验和很容易重现,所以鬼鬼祟祟的人只需将校验和值更改为 1 + 2 + 9 = 12,这样该行就不会被篡改。
1, 2, 9, 12
现在我的问题是,我怎样才能制作一个更复杂的校验和值,这样一个鬼鬼祟祟的人就无法在不使校验和不再有效的情况下进行这种类型的更改?也许我可以创建一个黑盒 exe,给定行的前三个值可以给出一个更复杂的校验和,例如:
a^2 + b^2 + c^2
但是,虽然这个逻辑对于狡猾的用户来说是未知的,但他/她仍然可以将这些值输入到黑盒 exe 中并得到一个有效的校验和。
关于如何确保表中的所有行都未被篡改的任何想法?我试图避免的方法是每次使用我正在创建的程序对其进行合法修改时保存表的副本。这是可能的,但似乎是一个非常不雅的解决方案。必须有更好的方法,对吧?