python实现socket的rsa加密通信,分客户端代码和服务端代码
时间: 2023-11-12 11:08:37 浏览: 65
客户端代码:
```python
import socket
import rsa
# 生成公钥和私钥
(pubkey, privkey) = rsa.newkeys(512)
# 连接服务器
host = '127.0.0.1'
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
# 发送公钥给服务器
s.send(pubkey.save_pkcs1())
# 接收加密消息
msg = s.recv(1024)
# 使用私钥解密
msg = rsa.decrypt(msg, privkey).decode('utf-8')
print('Received from server:', msg)
# 发送消息给服务器
msg = 'Hello, server!'
# 使用服务器的公钥加密
msg = rsa.encrypt(msg.encode('utf-8'), rsa.PublicKey.load_pkcs1(s.recv(1024)))
s.send(msg)
s.close()
```
服务端代码:
```python
import socket
import rsa
# 生成公钥和私钥
(pubkey, privkey) = rsa.newkeys(512)
# 创建服务器
host = '127.0.0.1'
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
print('Waiting for client...')
# 等待客户端连接
conn, addr = s.accept()
print('Connected by', addr)
# 接收客户端公钥
pubkey_client = rsa.PublicKey.load_pkcs1(conn.recv(1024))
# 发送加密消息给客户端
msg = 'Hello, client!'
# 使用客户端的公钥加密
msg = rsa.encrypt(msg.encode('utf-8'), pubkey_client)
conn.send(msg)
# 接收客户端消息
msg = conn.recv(1024)
# 使用私钥解密
msg = rsa.decrypt(msg, privkey).decode('utf-8')
print('Received from client:', msg)
conn.close()
s.close()
```
注意,这里的RSA加密只是为了演示如何使用RSA加密通信,实际应用中需要考虑安全性,并采用更加复杂的加密算法。