我正在研究一个项目,您可以在该项目上通过套接字发送文件,并且文件已进行AES加密。它可以工作,它可以加密数据并通过套接字发送它,可以很好地解密,但是图像变得困惑,下面是之前图像的示例,之后我该如何纠正呢?

前:
python - 通过AES文件传输损坏数据python Tkinter-LMLPHP

后:
python - 通过AES文件传输损坏数据python Tkinter-LMLPHP

加密和解密位于我创建的单独模块中,这就是为什么它们像下面一样被引用

加密和解密代码:

def encrypt(key, data, iv):
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    return encryptor.encrypt(data)

def decrypt(key, data, iv):
    decryptor = AES.new(key, AES.MODE_CBC, iv)
    return decryptor.decrypt(data)

服务器代码:
s = socket.socket()
s.bind(("127.0.0.1", 5000))
s.listen(1)
c, addr = self.s.accept

name = c.recv(1024)
name = name.split("/")[-1]

newFile = open(self.curpath + name, "wb")
stop = False

while True:
    data = c.recv(24*1024)

    print(data[-4:])
    if data[-4:] == "DONE":
        break

    data = decrypt(self.key, data, self.iv)
    newFile.write(data)

    print("STOP")
    newFile.close()

客户代码:
s. = socket.socket()
s.connect(("127.0.0.1", 5000)

item = "Splash.png"
s.send(item)

with open(item, "rb") as fp:
        while True:
            chunk = fp.read(64*1024)

            if len(chunk) == 0:
                break
            elif len(chunk) % 16 != 0:
                chunk += " " * (16 - len(chunk) % 16)
            s.send(encrypt(self.key, chunk, self.iv))

s.send("DONE")
print("Done")

最佳答案

通过使用@ t.m.adam注释,我可以使用.rstrip(" ")使该软件正确运行

10-07 19:27
查看更多