这个问题更多的是数学方面。我给出了一个4字节的UID列表和一个相应的2字节代码列表 - 让我们称它们为散列。找到算法来计算特定输入的具体输出
它看起来像这样:
7D04E214 --> 4A49
7D048DC3 --> A0E7
7D04DB2E --> 4191
...
我有一些像这样的元组50,所以我想,如果我发现计算正确的哈希所有的UID的算法,我可以很肯定是正确的。
这是我的问题:我真的不知道如何开始。我不是数学家,对这类问题没有经验。我怀疑某种按位算法。它看起来可能是CRC16,但我已经证明了这一点。我不认为这是任何流行的算法。我也认为(或者更希望)算法不是太复杂。
我知道寻找计算某个输入的函数的一般问题是不可判定的。但假设算法很简单,我有什么可能?有没有可以帮助我的工具?是否有任何你可以建议写入我自己的工具的读取?我正在考虑某种暴力行为,但我怎样以系统的方式来做到这一点?
在此先感谢!
更新:由于没有关于我的问题有些不清晰:我真的需要找到的是使用了第一个地方创建的UID的哈希值的一种算法 - 即表现为以同样的方式或至少一个所有可能的UID(即4字节数字)。既然有人指出可能存在无数的函数,那么我想我必须找到最简单的函数,并根据更多的UID值进行测试。正如我所说的,我实际上假设该算法很简单并且没有充满模糊的密钥。如果我错了,我注定你注意到的。但如果没有,也许我有机会尝试错误。
可能属于[之一](http://cs.stackexchange.com/)[the](http://programmers.stackexchange.com/)[other](http://cstheory.stackexchange.com /)[网站](http://math.stackexchange.com/)。 – Dukeling 2013-02-10 22:36:51
给定50个元组,找到一个成功预测kew密钥映射的算法:没有机会。给定50个元组,找到一个成功映射所有密钥的算法:简单。给定50个元组,找到一个成功映射所有密钥而不实际存储映射的算法:非平凡自动执行。另外,并不常用。 – 2013-02-10 22:38:04
@ JanDvorak答案的一个稍微更加明确的版本:假设它只有50对,并且你没有被赋予哈希算法,那么最简单的解决方案就是创建一个映射(例如Java的'HashMap'或Python的'dict'),其中键是原始字符串,并且值(从输入密钥获得)是所需的散列。 50对于计算机来说是一个小数目,因此尝试对哈希算法进行逆向工程是不值得花时间的(根据所使用的哈希算法,这是一个很难实际上不可能完成的任务)。 – acattle 2013-02-10 22:43:07