Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用套接字发送加密字符串_Python_Sockets_Encryption - Fatal编程技术网

在Python中使用套接字发送加密字符串

在Python中使用套接字发送加密字符串,python,sockets,encryption,Python,Sockets,Encryption,我制作了一个简单的服务器程序,可以同时从4个不同的客户端接收数据。现在我想用AES-128加密发送一些数据,但应该在服务器端解码。 以下是我的服务器代码: from socket import * from threading import Thread def clientHandler(): conn, addr = s.accept() print addr, "is connected" while 1: data = conn.recv(102

我制作了一个简单的服务器程序,可以同时从4个不同的客户端接收数据。现在我想用AES-128加密发送一些数据,但应该在服务器端解码。 以下是我的服务器代码:

from socket import *
from threading import Thread

def clientHandler():
    conn, addr = s.accept()
    print addr, "is connected"
    while 1:
        data = conn.recv(1024)
        if not data:
            break
        print "Received Message", repr(data)


HOST = "" #localhost
PORT = 15000


s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(4)

print "Server is runnig"
#Thread(target=clientHandler).start()
#Thread(target=clientHandler).start()
#Thread(target=clientHandler).start()

for i in range(4):
    Thread(target=clientHandler).start()

s.close()
我正在从我的客户端发送这样的数据

from socket import *
s = socket()
s.connect(("localhost",15000))
s.send()

我应该如何修改我的客户端代码和服务器代码,以便在其中包含AES-128加密。。请在这方面帮助我。

使用支持AES的Python加密模块。您需要一个对称密钥(用于加密和解密的相同密钥)。如果使用相同的密码短语和初始化向量(IV),则可以在服务器和客户端中生成相同的密钥

总结: 1.用于加密和解密的相同密钥 2.使用Crypto.Cipher.AES

AES有生成密钥、加密和解密数据的方法。以下链接包含实际代码

客户端-调用此方法加密数据并发送加密数据

from Crypto.Cipher import AES

def do_encrypt(message):
    obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
    ciphertext = obj.encrypt(message)
    return ciphertext
服务器-接收数据并调用此方法解密数据

from Crypto.Cipher import AES

def do_decrypt(ciphertext):
    obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
    message = obj2.decrypt(ciphertext)
    return message

这是一个示例代码,请确保选择了强密码短语和IV.

我对Python中的加密业务非常陌生。我尝试过使用此代码进行加密,但它给出了一些密钥大小错误
def encryption(privateInfo):

PADDING='{

pad=lambda s:s+(BLOCK\u size-len(s)%BLOCK\u size)*PADDING
EncodeAES=lambda c,s:base64.b64encode(c.encrypt(pad))

secret=“secret\u key”
print“加密密钥:”,secret

cipher=AES.new(secret)

encoded=EncodeAES(cipher,privateInfo)

print“加密字符串:”,encoded

非常感谢。现在我成功地传输了数据,但如果大小不是16的倍数,则会产生错误。您也可以帮助我解决此问题吗?请参阅本文中的第一个答案,其中解释了如何解决填充错误。另外,我忘了提到,您可以使用base64encode/base64decode将其转换为加密将文本转换为ascii。第一个答案包含您需要的所有内容。好的,非常感谢。这个问题也解决了。您提到了选择强密码短语和IV…如何做到这一点?是否涉及任何数学问题?如果我想在客户机上创建密钥并使用deffie hellman密钥交换等与服务器秘密共享该怎么办?这是否意味着Python中的ntable?