我目前正在开展一个项目。在这个项目中,我有一组遵循特定算法的数据。我必须找到模式。
1 355138022809833 RUPQ730562P 247001 20578330 70175500
2 355138022809841 RUPQ730563D 247001 72754950 71957850
3 355138023475287 RVSQ831978E 247001 39374170 25101090
4 355138023475295 RVSQ831979F 247001 06260280 87190670
5 355138023475303 RVSQ831980L 247001 05025410 26440510
6 355138023475352 RVSQ831985Y 247001 96637700 48209200
7 355138023475360 RVSQ831986A 247001 27362620 70790740
8 355138023475378 RVSQ831987P 247001 16576600 30002180
9 355138023475386 RVSQ831988D 247001 74778020 98010580
10 355138023475402 RVSQ831990M 247001 25716170 97946520
第一列是序列号。接下来的3列是将给出的输入。接下来的2是算法的输出。
所以基本上
我有3个变量x,y,z(上述数据的第2,第3,第4列)
并且
y1 = f1(x, y, z)
y2 = f2(x, y, z)
y1是以上数据的第5列
y2是以上数据的第6列
我有以上数据。现在我需要找到函数f1和f2。
我应该遵循什么程序?必须采取什么措施?
Krishna Kant Sharma的编辑1
我发布此问题是为了不要求回答算法。当我们在变量中也有字母表时,我只是要求采取必要的步骤来解决这些问题。根据我的经验,这是第一次有一小部分stackoverflow社区的行为像封闭的人一样。堆栈溢出的重点是什么?我们在这里互相帮助,了解和解决问题。当我们中的一些人需要帮助时伸出援助之手。那么为什么我们不要停止在一些技术纯度(如字母不是字母字符)周围跳动,并解决主要问题。
更多数据
11 355138023475436 RVSQ831993L 247001 07481830 49057990
12 355138023475444 RVSQ831994T 247001 65090950 87729430
13 355138023475451 RVSQ831995B 247001 06689330 60021180
14 355138023475469 RVSQ831996K 247001 05784310 69836640
15 355138023475477 RVSQ831997Z 247001 13157740 35850670
16 355138023475485 RVSQ831998Y 247001 68658020 77311320
17 355138023475501 RVSQ832000N 247001 01567780 26994970
18 355138023475519 RVSQ832001E 247001 43775370 58120770
19 355138023475527 RVSQ832002F 247001 42463550 55145190
20 355138023475535 RVSQ832003R 247001 85766840 15491950
答案 0 :(得分:5)
您应该采取的第一步是了解此输入数据的上下文。然后,您可以选择对结果列可能是什么以及在该上下文中通常使用的算法/函数进行假设。
接下来的一点是分析自己的输入数据,寻找与现实世界相关的模式和匹配(例如邮政编码,序列号,日期等)。因此,你应该看看输入的不同部分,但同样也是输入块。
如果你之前没有成功,除了试错之外你别无选择。你仍然可以通过查看输入数据来解决一些函数或算法(例如,字母会使典型的数学函数无效,所以也许它是一些散列函数。)
详细说明您的输入数据:
我会在输入数据的某些组合上尝试一些(常见的)哈希函数,这些组合产生8位数的结果并查找结果。
答案 1 :(得分:4)
很抱歉,但我认为你所要求的是不可能的(从计算的角度来看)。
这些数据来自的系统可以做,比方说,
SELECT Y1, Y2 FROM my_secret_data WHERE Col1 = x AND Col2 = Y and Col3 = Z;
my_secret_data
包含非计算派生的值。
因此,除非您拥有基础表,否则您永远无法找到解决它的算法(除非您拥有输入和输出的所有可能组合 - 这将意味着重建整个表)
外部计算,我认为你可以做的就是寻找模式,并尝试找出输入/输出值代表什么,并看看它带你去哪里。
修改强>
在某些情况下,一切都不会丢失;如果输入,输出和算法使用的任何函数都是连续的(因为输入是字母数字,这看起来不是这里的情况),情况会有所不同。
如果是,你可以(可能)通过interpolating(也许是神经网络)找到算法,但在这种情况下,给定值,我认为你需要更多的样本数据。
答案 2 :(得分:3)
查看第5行和第6行。所有3个输入参数都相同,但输出不同。我认为只有你给我们的数据才能解决这个问题。
答案 3 :(得分:2)
你在哪里获得这些,以及它们是如何被使用的?
如果使用真实f1和f2的实体正在使用它们进行身份验证,并且它们完全是智能的,那么f1和f2将成为加密安全功能,并且您基本上没有机会破坏它们。如果它们只是校验和,您可以尝试使用常见的校验和算法。我将从维基百科开始。
您可以获得多少数据?你能得到任意输入的f1和f2的值,还是仅限于你能观察到的值?如果您可以观察一个字符不同的输入值,您可以看到它所做的更改有多少。如果结果大致相同,那么它不是加密哈希,而且你有更好的机会。
这对您和您的公司有多重要?我说你很少有成功的机会,除非我现在看到的不止这些。任何解决方案极有可能涉及大量的暴力搜索。
顺便说一句,在您的求解过程中,请勿使用所有数据。您可以提出某种功能来适应任何数据点。保留一些数据以供测试,以查看派生函数是否适用于外部数据。
最后,这是否符合道德标准?你还没有告诉我们这些数字来自何处,而且看起来似乎是另一家公司出于安全目的而生成的东西,而且他们的意图可能是好的或坏的。这是值得思考的问题,如果只是因为一个对他人行为不道德的公司可能会对其员工表现出不道德的行为。
答案 4 :(得分:0)
您始终可以定义分段函数:
F1(355138022809833,RUPQ730562P,247001)= 20578330 F1(355138022809841,RUPQ730563D,247001)= 72754950
等。因为你不需要连续性。
答案 5 :(得分:0)
鉴于样本数据中的z值没有变化,可以将其删除。如果您只有数据,那么实际上没有解决此问题的通用方法。另一方面,如果您能够使用自己设计的任意输入来测试函数,则可以使用类似于差分密码分析的技术。
答案 6 :(得分:0)
这似乎是一个神经网络最好解决的问题。希望你能获得更大的数据集来训练!
答案 7 :(得分:0)
如果您确定有模式,可以尝试machine learning种技巧。但是你设置和训练“机器”的数据集很小(每个只有10个)。您还需要进行预测,因此有些算法对集群,分类,关联挖掘不起作用。神经网络将是一种技术。这是你可以尝试的选项。不幸的是,我不是机器学习/数据挖掘专家,不能告诉你的方式。对于Java,请查看WEKA。
答案 8 :(得分:0)
从不同角度看数据:
出现什么值,哪些数字。
看看差异。这暴露了x和y是连续的,并且当你去掉最后一个数字/字母时有一个紧密的关系。
看看模式。 y1从06开始,然后是05,第4,5和13,14行。序列号减去校验位的差值为16.这可能是巧合,也可能不是。
运行统计测试(此处没有太多数据)。
查看各种数字系统中的数据(十六进制,二进制)。
查看数字的素数分解。
查看数据中微小差异的影响。
您最初可能希望排除前两行,因为它们的序列号远远不同于其他行,这可能会模糊可能的模式。
尝试尽可能多地找出有关计算的背景知识。
密码分析的一些知识也不错。
然后编制一些工作假设,如何计算y1和y2值并对其进行测试。例如,我要检查的第一个是使用shift和xor(可能是CRC),或者序列号模数为10000000的某些线性函数,而忽略尾随零。
冲洗并重复。如果你有足够的耐心并且不太难以找到它。