假设我有一系列由校验位组成的索引号。如果我有一个足够公平的样本(比如 250 个样本索引号),我是否有办法提取用于生成校验位的算法?
我认为至少应该有一种编程方法来找到一组可能的算法。
更新:索引号的长度为 8 位,包括校验位。
不,不是在一般情况下,因为可能的算法数量远远超过您的想象。250 个样本空间可能不足以进行正确的数值分析。
举一个极端的例子,假设您的样本都是 15 位数长。如果算法改变了大于 15 个字符的行为,您将无法可靠地检测到该算法。
如果您想确定,您应该对检查数字有效性(如果可用)的代码进行逆向工程。
如果您知道该算法是从比“所有可能的算法”更小的子集中得出的,那么它可能是可能的。但算法可能只是故事的一半——即使使用相同的算法,乘数、求幂和环绕点也会发生变化。
paxdiablo 是正确的,如果不做任何其他假设(或者只是拥有整个样本空间 - 然后您可以通过查找表来定义算法),您就无法猜测算法。
但是,如果校验位是使用依赖于“数据位”的一些线性公式计算的(这是一种非常常见的情况,您可以在维基百科文章中看到),给定足够的样本,您可以使用欧拉消除。