使用XOR解密消息并通过套接字进行响应



我正在尝试完成一个挑战,其中说明:

我们注意到外星人在他们的飞船之间发送信息,我们认为他们正在使用XOR来加密信息,我们截获了一个密钥。

设置一个侦听("localhost",10000(的服务器来拦截其中一条外来消息。当你用密钥"对消息执行逐位异或时;攻击人类";然后用加密的数据进行响应。

提示:阅读响应以获取标志。

经过一些研究,我能够想出以下代码。然而,当我在挑战的代码编辑器中运行它时,我收到的唯一反馈是"尝试连接到服务器并接收回消息时出错">

import socket
# Function to xor strings
def xor_string(string):
key = "attackthehumans"
bit_key = ''.join(format(ord(i), 'b') for i in key)
bit_data = ''.join(format(ord(i), 'b') for i in string)

xor_string = str(0)
for i in range(len(bit_key)):
if bit_data[i] == bit_key[i]:
xor_string = xor_string + str(0)
else:
xor_string = xor_string + str(1)

return xor_string
# Sets up server on localhost and port 10000
print("Setting up server...")
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("localhost", 10000))
print("Server set up. Listening for connections...")
server.listen()
conn, addr = server.accept()
print("Connected by: {}".format(addr))
# Once connection is established, server receives data, XOR's it, sends it back, and
# waits for response to get the flag. 
with conn: 
print("Receiving data from connection... ")
data = conn.recv()
data = data.decode()

print("Data received: {}".format(data.decode()))

xor_data = xor_string(data)

conn.sendall(xor_data.encode())

response = conn.recv()
response = response.decode()

print(response)

我不确定我做错了什么。我不知道是套接字还是xor_string函数。如有任何帮助,我们将不胜感激。

这应该足以执行XORing:

def xor_string(string):
key = b"attackthehumans"
key = key * (len(string)//len(key)+1)
res = bytes([k^s for (k,s) in zip(key,string)])
return res

然后你的主代码变成:

print("Receiving data from connection... ")
data = conn.recv()
print("Data received:", data)
xor_data = xor_string(data)
conn.sendall(xor_data)
print(conn.recv())

最新更新