【问题标题】:AES Decryption doesn't workAES 解密不起作用
【发布时间】:2017-06-27 19:27:21
【问题描述】:

我正在使用套接字开发一个客户端-服务器应用程序,其中客户端使用 Cipher AES-256 加密发送加密的 JSON 数据,服务器负责解密收到的这些文件并将它们打印出来。

我在 localhost 上尝试过,解密成功了,但是当我设置我的 Centos 服务器时,它不起作用。来自客户端的加密数据被接收但未被解密。

这是服务器代码:

服务器代码

#!/usr/bin/python

import socket
import threading
import Encryption


class ThreadedServer(object):
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind((self.host, self.port))

def listen(self):
    self.sock.listen(5)
    while True:
        client, address = self.sock.accept()
        client.settimeout(60)
        threading.Thread(target = self.listenToClient,args = (client,address)).start()

def listenToClient(self, client, address):
    size = 4096
    while True:
        print("Receiving")
        try:
            data = client.recv(size)
            if data:
                cipher = Encryption.Encryption('mysecretpassword')
                jsondata = cipher.decrypt(data)
                print(jsondata)
                self.request.close()
            else:
                raise socket.error('Client disconnected')
        except:
            client.close()
            return False

if __name__ == "__main__":
    ThreadedServer(adress,port).listen()

加密文件的灵感来自here

【问题讨论】:

  • 我看到的问题是,如果数据大小 > 4096。在这种情况下,数据会被截断吗?
  • @Jean-FrançoisFabre 数据大小肯定小于 4096。此外,我在 localhost 上尝试过,它工作得很好,所以它与数据大小无关。
  • 尽管如此,data = client.recv(size)不正确 假定消息边界将对应于数据包边界。这可能偶尔会发生,但不能依赖它。您必须使用某种可靠的方法让服务器确定消息何时结束,例如为每个网络消息添加一个 4 字节的大端长度值作为前缀。
  • 我遇到的问题是兼容性问题..我会写答案。

标签: python encryption cryptography aes pycrypto


【解决方案1】:

这个问题是unpad lambda函数中的兼容版本:

Python 2

unpad = lambda s : s[0:-ord(s[-1])]

Python 3

unpad = lambda s : s[0:-s[-1]]

【讨论】:

  • 呃,当一种语言在版本之间存在这种中断时,你不讨厌它(虽然可能更糟,它可能是 PHP)。请注意,您可以在一两天后接受自己的答案(显然,您不会因此获得任何声誉,但您确实会获得赞誉)。
  • 好吧,这是无法避免的!我缺乏知识,仅此而已。我以后需要多注意这样的细节!我会接受可能会在两天内回复。
  • 太棒了。感谢您的反馈,我会记住这一点。当然也欢迎使用 StackOverflow。
  • 谢谢@MaartenBodewes :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2016-05-19
相关资源
最近更新 更多