2014-12-04 69 views
3

我做了一个简单的服务器程序,它能够一次从4个不同的客户端接收数据。现在我想用AES-128加密发送一些数据,但应该在服务器端进行解码。 这里是我的服务器代码:在Python中使用套接字发送加密的字符串

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加密内它..在这方面请帮助我。

回答

7

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

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

AES具有的方法生成密钥,加密和解密数据。以下链接有实际的代码。 pycryptostackoverflow

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

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。

+0

我真的很陌生,在Python这个加密业务。我曾尝试用于加密该代码,但它提供了一些关键尺寸误差 'DEF加密(privateInfo):'
'BLOCK_SIZE = 16'
'PADDING = '{''
'垫=拉姆达S:S + (BLOCK_SIZE-LEN(S)%BLOCK_SIZE)* PADDING' 'EncodeAES =拉姆达C,S:base64.b64encode(c.encrypt(衬垫(S)))'
'秘密= “SECRET_KEY”'
'打印“加密密钥”,secret'
'密码= AES.new(秘密)'
'编码= EncodeAES(密码,privateInfo)'
'打印 “加密的字符串:”,encoded'
2014-12-04 06:56:42

+0

我真的很抱歉,我很简单,不能合成它 – 2014-12-04 07:00:33

+0

@AsadIrfan我已更新示例代码 – helloV 2014-12-04 07:11:47

相关问题