2009-10-22 110 views
2

我目前正在进行一个项目。在这个项目中,我有一组数据遵循特定的算法。我必须找到模式。在这些数字中查找模式

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(第二,第三,上述数据的第4列)

而且

y1 = f1(x, y, z) 

y2 = f2(x, y, z) 

y1为上述数据

的第5列

y2是以上数据的第6列

我有以上数据。现在我需要找到函数f1和f2。

我应该遵循什么程序?必须采取哪些措施?

EDIT 1奎师那康德·夏尔马

我张贴了这个问题不要问了应答算法。我只是要求采取必要的措施来解决这些问题,当我们在变量中也有字母时。按照我的经验,这是第一次,一小部分的stackoverflow社区都像封闭式的人一样行事。什么是整个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

f1和f2应该怎样处理参数?输出y1和y2? ...在这里有很少的格式问题以及列对齐。修复会很好。 – 2009-10-22 14:18:47

+0

2个词语:受过教育的猜测:) – cwap 2009-10-22 14:18:54

+3

请原谅我的怀疑态度,但这听起来像是在尝试对某些东西进行逆向工程。听起来像是在某些数据中“寻找模式”的奇怪要求。或者这是一种难题/谜语? – 2009-10-22 14:20:27

回答

4

对不起,但我认为你所问的是不可能的(从计算的角度来看)。

这个数据来自能够做的,说系统,

SELECT Y1, Y2 FROM my_secret_data WHERE Col1 = x AND Col2 = Y and Col3 = Z; 

my_secret_data包含不计算得出的值。

所以,除非你有基础表,你永远无法找到解决它(除非你有输入和输出的每一个可能的组合 - 那么这将意味着重建整个表)的算法

外计算,所有我认为你可以做的是查找模式,并尝试找出输入/输出值代表什么,并看看你需要的地方。

编辑:

所有未在某些情况下丢失;如果输入,输出和算法使用是连续的任何函数(给定的输入是字母数字,这并不看这里的情况)

如果他们成功了,你可以(可能)发现通过interpolating算法(事情会有所不同也许是一个神经网络),但在这些情况下,考虑到这些值,我认为你需要更多的样本数据。

+0

感谢您的帮助,DanSingerman。 – 2009-10-22 16:16:15

+0

他们看起来几乎都是连续的......这些作品相当重要,但输出似乎在整个空间中传播开来! – 2009-10-22 19:50:58

3

看行5和6的所有3个输入参数是相同的,但输出是不同的。我不认为这是可能的解决只有你给我们的数据。

+1

很好的发现!除非rownumber也是一个输入变量,否则这可能无法解决。 – pyrocumulus 2009-10-22 14:22:53

+0

好眼睛德米特里。事实上,如果在相同的输入下得到不同的结果,它违背CS原则。有没有参数丢失?有没有一个暂时的组件? – 2009-10-22 14:23:10

+0

对不起。数据中有错误。我现在更新了它。 – 2009-10-22 14:24:52

5

你应该采取的第一步是了解这个输入数据的背景是什么。然后,您可以选择对结果列的可能性以及在该上下文中通常使用的算法/函数进行假设。

接下来的一点是分析你自己的输入数据寻找模式,并与现实世界的东西匹配(例如邮政编码,序列号,日期等)。因此,你应该看看不同部分的输入,但也在类似的输入块。

如果您以前没有成功,除了试验和错误之外,您别无选择。您仍然可以整理出一些功能或算法通过查看输入数据(例如字母将呈现典型的数学函数没用的,所以也许它的一些散列函数)。

为了进一步了解您的输入数据的一些光:

  • x(也是y)的最后一个字符看起来像一个校验和字符,所以如果你寻找模式检查没有最后一个字符的数字/文本
  • y中的字母可能是一些常见的货币缩写,商业进程或其他东西
  • 结果列中的最后0也可能是一些检查这个char或者取决于z列(没有足够的数据来说明)

我想在输入数据的某些组合上尝试一些(通用)哈希函数,它们产生8位数的结果并查找结果。

+0

感谢您的帮助,MicSim。 – 2009-10-22 16:15:41

0

你总是可以定义一个分段函数:

F1(355138022809833,RUPQ730562P,247001)= 20578330个 F1(355138022809841,RUPQ730563D,247001)= 72754950

等你不需要连续性。

+0

没有,这不会工作。我们无法与他们一起找到未知数。 – 2009-10-22 16:22:49

+1

无论你的函数值是以固定点为准,它可能在其他点上取任意值。 – Jaska 2009-10-22 16:25:15

0

鉴于z值在样本数据中没有变化,可以将其删除。如果你只有数据,那么真的没有通用的方法来解决这个问题。另一方面,如果你有能力用你自己设计的任意输入来测试函数,你可以使用类似于差分密码分析的技术。

0

这似乎是一个神经网络最好解决的问题。希望你可以得到一个更大的数据集来训练!

0

如果你确定有一种模式,你可以尝试machine learning技术。但是用于设置和训练“机器”的数据集非常小(每个只有10个)。进一步你需要一个预测,所以几种算法不适合你,比如聚类,分类,关联挖掘。神经网络将是这样一种技术。这是您可以尝试的选项。不幸的是,我不是机器学习/数据挖掘专家,不能告诉你方式。对于Java看看WEKA

+0

这几乎肯定是徒劳的。机器学习技术通常提供近似解决方案它们通常通过将参数与预定义的计算(在神经网络中,这些通常是权重)协同工作,并且如果原始函数不是相同的形式,网络将无法复制它们。 – 2009-10-22 16:54:15

+0

只是一个尝试;-) ... – 2009-10-22 19:51:37

2

你在哪里得到这些,他们如何被使用?

如果使用真正的f1和f2的实体正在使用它们进行认证,并且它们完全智能化,那么f1和f2将是加密安全功能,并且基本上没有机会打破它们。如果他们只是校验和,你可以尝试通用校验和算法。我会从维基百科开始。

你能得到多少数据?你能得到任意输入的f1和f2的值吗,还是仅限于你能观察到的?如果您可以观察一个字符中输入不同的值,您可以看到这些变化有多大。如果结果大部分相同,这不是一个加密哈希,你有更好的机会。

这对你和你的公司有多重要?我想说,除非我现在看到的情况多,否则你的成功几率很小。任何解决方案极有可能涉及大量的暴力搜索。

顺便说一句,在你的解决过程中,不要使用所有的数据。你可以想出某种功能来适应任何数据点。保留一点数据以便测试,看看您的派生函数是否适用于外部数据。

最后,这是否是道德的?你还没有告诉我们这些数字来自哪里,看起来似乎是另一家公司为安全目的而产生的东西,他们的意图可能是好的或坏的。这是值得思考的事情,如果仅仅是因为一个对其他人表现不道德的公司可能对其员工表现出不道德的行为。

+0

那么说。谢谢。 – 2009-10-22 17:15:53

0

看从不同的角度数据:

  • 什么值发生,这个数字。

  • 看看差异。这暴露了x和y是连续的,并且当您剥离最后一位数字/字母时,存在紧密的关系。

  • 看看模式。 y1从06开始,05在第4,5和13,14行。序列号减去校验位的差值为16.这可能是巧合,也可能不是。

  • 运行统计测试(在这里没有太多的数据)。

  • 查看各种数字系统(十六进制,二进制)中的数据。

  • 看看数字的素数分解。

  • 看看数据中的小差异的影响。

  • 您可能最初想要排除前两行,因为它们的序列号与其他序列号相差太远,这可能会掩盖可能的模式。

尽量找出尽可能多的计算背景。

密码分析的一些知识也不会太差。

然后编制一些工作假设,如何计算y1和y2值并对其进行测试。例如,我要检查的第一个问题就是在移位和xor(也许是CRC)或者序列号模10000000的一些线性函数中忽略尾随零。

冲洗并重复。如果你有足够的耐心,并且不太难,你可以找到它。