【发布时间】:2017-09-17 14:00:42
【问题描述】:
我收到了朋友的挑战。 他说我需要反转函数,我需要找到输入。 但是,我被困了好几个小时,思考逻辑以及如何在代码中编写我的想法。
他给了我这个算法:
def hash_cbc(input):
initial = 'a'
key = 'netsos'
output = [ord(initial)]
def enc(c, key, i):
z = key[i % len(key)]
return (c + ord(z)) ^ ord(z)
for i in range(len(input)):
prev_char = output[i]
next_char = enc(prev_char, key, i) ^ ord(input[i])
output.append(next_char)
return output
这个算法的输出必须是:
97, 194, 299, 411, 533, 654, 768, 873, 965, 1066, 1164, 1272, 1399, 1512, 1603, 1706, 1792, 1895, 1994, 2110, 2215, 2310, 2404, 2517, 2645, 2762
我需要反转函数以便获得输入。输入必须是字符串。
请帮助我,我被困了几个小时,没有任何结果。 本来想反转XOR函数,但是真的很困惑怎么写。
我在想这些算法这样做
enc(prev_char, key, i) ^ 1st ordinal input = 1st output
enc(prev_char, key, i) ^ 2nd ordinal input = 2nd output
enc(prev_char, key, i) ^ 3rd ordinal input = 3rd output
等在循环中这样做
但我不确定如何反转,因为有
“enc(prev_char, key, i)” 部分让我感到困惑
我也试过自己做逆向代码
def enc(c, key, i):
Awalan = input("Insert numbers: ")
Awalan_split = Awalan.split (', ')
Awalan_len = len(Awalan_split)
initial = 'a'
key = 'netsos'
output = [ord(initial)]
z = key[i % len(key)]
return (c + ord(z)) ^ ord(z)
for i in range(Awalan_len):
prev_char = output[i]
next_char = int(Awalan_split[i]) ^ enc(prev_char, key, i)
char_convert = chr(next_char)
return(char_convert)
print(char_convert)
但没有运气,它只是给我空输出。 我的代码有什么问题?
【问题讨论】:
-
在你试图解决这个问题的过程中,你究竟需要帮助吗?
-
我试图反转 XOR (^) 函数,但没有运气......也许你可以给我算法建议
-
编写一个程序来为你做给定的事情不是我们在这里所做的。 StackOverflow 的存在是一个问答知识库——一个规范问题的集合(除了你之外的人可能会遇到的问题)和对它们的答案。如果您可以找到一个可能更广泛适用的问题,请删除该问题的外围元素以使该适用性更加清晰(并将标题重点放在该问题,与您正在尝试做的事情相比)会有所帮助。
-
啊,之前谢谢....所以我需要在这个论坛中更“一般”?
-
某种意义上的一般,某种意义上的具体。一般而言,我们希望问题尽可能被其他人重复使用(理想的情况是我们尽可能接近不再需要发布更多问题的状态,因为它们都已被询问和回答并且可以搜索)。具体而言,我们希望发布的每个问题都专注于一个明确指定的问题,提供最简单的代码/输入/&c。可以说明这一点。