我是python的新手,我正在编写一个安全的ftp服务器/客户端来处理文件的基本上传/下载(但加密)。
为确保客户端具有密钥,我加密并发送随机的32字节数。 客户端必须解密该号码,添加一个,重新加密,然后将其返回给服务器。 服务器检查响应是否为随机数+ 1,然后在它们等效的情况下继续连接。 问题是这种方式在90%的情况下起作用,但有时会失败(即使客户端发送了良好的响应)。
if int.from_bytes(challenge, "big") + 1 == int.from_bytes(response, "big"):
print("Good\nExpected: {0}\nReceived: {0}".format(
int.from_bytes(challenge, "big") + 1,
int.from_bytes(response, "big")))
else:
print("Bad\nExpected: {0}\nReceived: {0}".format(
int.from_bytes(challenge, "big") + 1,
int.from_bytes(response, "big")))
10次中的9次,这进入True状态,但有时会失败。 这些是失败时的例子:
Bad
Expected:
65159048323870645118410560973513118036375130115063959378348917255680432299875
Received:
65159048323870645118410560973513118036375130115063959378348917255680432299875
Bad
Expected:
94602782648778784750235610259612519850690550920952731294858863927077528757933
Received:
94602782648778784750235610259612519850690550920952731294858863927077528757933
请注意,上述预期和收到的每一个实际上都是相同的。
以下是一些成功的数字示例:
Good
Expected:
91751260209520864629218443027060768890746721638897648279482154562044918570881
Received:
91751260209520864629218443027060768890746721638897648279482154562044918570881
Good
Expected:
104504930179798203375748204555227260444250367405369759767776407892919812999121
Received:
104504930179798203375748204555227260444250367405369759767776407892919812999121
知道发生了什么事吗? 谢谢你的时间。 编辑:代码段:
服务器端:
challenge = os.urandom(32)
socket.send_msg(challenge, encrypt=True)
response = socket.recv_msg(32, decrypt=True)
if int.from_bytes(challenge, "big") + 1 != int.from_bytes(response, "big"):
print("Expected: {0}\nReceived: {0}".format(int.from_bytes(challenge, "big") + 1, int.from_bytes(response, "big")))
客户端:
challenge = self._socket.recv_raw(32, decrypt=True)
challenge = int.from_bytes(challenge, "big") + 1
self.sckt.send_msg(challenge.to_bytes(32, "big"), encrypt=True)
请注意,我已经彻底测试了加密代码和套接字消息传递协议,这些都不是问题。