Python 安全破解澳大利亚信息学奥林匹克2009中级
嗨,最近我在尝试AIO 2009中级版的一个问题 问题(重新表述)是:Python 安全破解澳大利亚信息学奥林匹克2009中级,python,algorithm,python-3.x,Python,Algorithm,Python 3.x,嗨,最近我在尝试AIO 2009中级版的一个问题 问题(重新表述)是: 有一个正整数序列,每个正整数都通过非负常数k加密(通过将k添加到序列中的每个值,k没有边界,只要a和b的以下边界保持不变),以给出整数a的列表。我们得到了原始非加密列表b的一小部分,因此2假设您得到了以下“加密”整数列表: E1 = [200,450,100,75,275,500,600,400,300] 以及解密的子列表。如下所示: L1 = [25,225,450,550,350] 将L1转换为一个新数组L2,这样每
有一个正整数序列,每个正整数都通过非负常数k加密(通过将k添加到序列中的每个值,k没有边界,只要a和b的以下边界保持不变),以给出整数a的列表。我们得到了原始非加密列表b的一小部分,因此2假设您得到了以下“加密”整数列表:
E1 = [200,450,100,75,275,500,600,400,300]
以及解密的子列表。如下所示:
L1 = [25,225,450,550,350]
将L1转换为一个新数组L2,这样每个元素都是其自身和前一个元素之间的差异。即L2[i]=L1[i]-L1[i-1]
。对于L2[0],让它为零
L2 = [0,200,225,100,-200]
删除第一个元素(L2=L2[1://code>)
现在,对加密列表执行相同的标准化:
E2 = [250,-350,-25,200,225,100,-200,-100]
现在,在规范化列表上执行经典的子字符串搜索,以查找L2在E2中开始的匹配索引
def findStartIndex(needle, haystack):
j = 0
while len(needle) < len(haystack[j:])
if (needle == haystack[j:j+len(needle)]
return j
j = j + 1
return -1
index = findStartIndex(L2, E2)
def findStartIndex(针式、草堆式):
j=0
而len(针)
如果上面的搜索返回一个整数值:index
(在本例中为3
):
那么键k
就是:E1[index]-L1[0]
在这个例子中,
k
是50
加密意味着什么?xor'ed?k和原始整数的边界是什么?如果可能有多个解怎么办?@kfx我已经编辑了这个问题,谢谢你指出!我想我在示例数组中有一两个输入错误。我会在以后有更多时间更正今晚。更新和验证。
def findStartIndex(needle, haystack):
j = 0
while len(needle) < len(haystack[j:])
if (needle == haystack[j:j+len(needle)]
return j
j = j + 1
return -1
index = findStartIndex(L2, E2)