我制作了一个简单的服务器程序,它能够一次从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的Crypto模块.您需要一个对称密钥(用于加密和解密的密钥).如果使用相同的密码短语和初始化向量(IV),则可以在服务器和客户端中生成相同的密钥.
摘要:
1.用于加密和解密的相同密钥
2.使用Crypto.Cipher.AES
AES具有生成密钥,加密和解密数据的方法.以下链接具有实际代码. pycrypto stackoverflow
客户端 – 调用此方法加密数据并发送加密数据
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,sockets,encryption